gpt4 book ai didi

angularjs - 是否可以在测试中覆盖模块配置函数的常量?

转载 作者:行者123 更新时间:2023-12-03 11:50:01 25 4
gpt4 key购买 nike

我已经花了很长时间努力反对尝试覆盖提供给模块配置函数的注入(inject)常量。我的代码看起来像

common.constant('I18n', <provided by server, comes up as undefined in tests>);
common.config(['I18n', function(I18n) {
console.log("common I18n " + I18n)
}]);

我们通常的方法来保证 I18n 在我们的单元测试中被注入(inject)是通过做
module(function($provide) {
$provide.constant('I18n', <mocks>);
});

这适用于我的 Controller ,但配置函数似乎没有查看 $provide 的内容d 在模块之外。它没有获取模拟值,而是获取定义为模块一部分的早期值。 (在我们的测试中未定义;在下面的 plunker 中,'foo'。)

下面是一个工作的 plunker(查看控制台);有谁知道我做错了什么?

http://plnkr.co/edit/utCuGmdRnFRUBKGqk2sD

最佳答案

首先:似乎 Jasmine 在您的 plunkr 中无法正常工作。但我不太确定——也许其他人可以再检查一次。尽管如此,我还是创建了一个新的 plunkr (http://plnkr.co/edit/MkUjSLIyWbj5A2Vy6h61?p=preview) 并按照以下说明操作:https://github.com/searls/jasmine-all .

您将看到您的 beforeEach代码永远不会运行。你可以检查这个:

module(function($provide) {
console.log('you will never see this');
$provide.constant('I18n', { FOO: "bar"});
});

你需要两件事:
  • it 中的真实测试功能 – expect(true).toBe(true)足够好
  • 您必须使用 inject测试中的某处,否则提供给 module 的函数不会被调用,也不会设置常量。

  • 如果您运行此代码,您将看到“绿色”:
    var common = angular.module('common', []);

    common.constant('I18n', 'foo');
    common.config(['I18n', function(I18n) {
    console.log("common I18n " + I18n)
    }]);

    var app = angular.module('plunker', ['common']);
    app.config(['I18n', function(I18n) {
    console.log("plunker I18n " + I18n)
    }]);

    describe('tests', function() {

    beforeEach(module('common'));
    beforeEach(function() {
    module(function($provide) {
    console.log('change to bar');
    $provide.constant('I18n', 'bar');
    });
    });
    beforeEach(module('plunker'));

    it('anything looks great', inject(function($injector) {
    var i18n = $injector.get('I18n');
    expect(i18n).toBe('bar');
    }));
    });

    我希望它会像你期望的那样工作!

    关于angularjs - 是否可以在测试中覆盖模块配置函数的常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052217/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com