这是我的简单代码
var app = angular.module('myApp', [])
.value('SimpleValue', {
aaa: '£££'
});
和单元测试
describe('ttt', function() {
beforeEach(module('myApp'));
it('ttt', inject(function(SimpleValue) {
expect(SimpleValue.aaa).toEqual('£££');
SimpleValue.aaa = 4;
}));
it('ttt', inject(function(SimpleValue) { // This doesn't start fresh and fails
expect(SimpleValue.aaa).toEqual('£££');
}));
});
describe('ttt', function() { // Neither does this
var SimpleValue;
beforeEach(module('myApp'));
beforeEach(inject(function(_SimpleValue_) {
SimpleValue = _SimpleValue_;
}));
it('ttt', function() {
expect(SimpleValue.aaa).toEqual('£££');
});
});
这不是我期望beforeEach(module('myApp'));
的行为。根据文档,在每个规范之前使用module('myApp')
有什么意义:https://docs.angularjs.org/api/ngMock/function/angular.mock.module它只是
收集通过注入创建注入器时将使用的配置信息。
?我认为它会重置myApp
以便为每个it
块启动清理,但事实证明它并没有。
有人可以对此有所了解吗?请看一下:
答案 0 :(得分:0)
注册.value
的服务无法重置。我不能告诉你原因,但看起来确实出乎意料。
例如,使用.factory
注册,测试按预期传递。
var app = angular.module('myApp', [])
// .value('SimpleValue', {aaa: '£££'});
.factory('SimpleValue', function () {
return {aaa: '£££'};
});
答案 1 :(得分:0)
这里的事情是,在第一次测试中,您正在修改对象的属性。但重要的是要意识到整个系统中只有该对象的一个副本。稍微改写myApp应该更清楚:
var simpleValue = {aaa: '£££'};
var app = angular.module('myApp', []).value('SimpleValue', simpleValue);
请参阅,您有点假设脚本的这一部分是作为每个规范的一部分执行的,但事实并非如此(代码的这个片段只加载到浏览器中一次)。
希望这个掠夺者能够清楚地了解整个故事:http://plnkr.co/edit/iLuIPaLyVFgzoTLygFz1?p=preview