Joe*_*rew 21 angularjs angularjs-module
我花了很长时间来试图覆盖提供给模块配置函数的注入常量.我的代码看起来像
common.constant('I18n', <provided by server, comes up as undefined in tests>);
common.config(['I18n', function(I18n) {
console.log("common I18n " + I18n)
}]);
Run Code Online (Sandbox Code Playgroud)
我们通常的方法是保证I18n在我们的单元测试中被注入了
module(function($provide) {
$provide.constant('I18n', <mocks>);
});
Run Code Online (Sandbox Code Playgroud)
这适用于我的控制器,但似乎配置功能不会查看$provide
模块外部的内容.它不是获取模拟值,而是将早期值定义为模块的一部分.(在我们的测试中未定义;在下面的plunker中,'foo'.)
下面是一个工作的plunker(看看控制台); 有谁知道我做错了什么?
mic*_*ael 26
首先:茉莉花似乎在你的傻瓜中不能正常工作.但我不太确定 - 也许其他人可以再次检查这个.不过我已经创建了一个新的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"});
});
Run Code Online (Sandbox Code Playgroud)
你需要两件事:
功能中的真正测试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');
}));
});
Run Code Online (Sandbox Code Playgroud)
我希望它会像你期望的那样工作!
归档时间: |
|
查看次数: |
20911 次 |
最近记录: |