AngularJS+Jasmine:如何从测试套件中每个规范的新模块开始
这是我的简单代码AngularJS+Jasmine:如何从测试套件中每个规范的新模块开始,angularjs,unit-testing,jasmine,Angularjs,Unit Testing,Jasmine,这是我的简单代码 var app = angular.module('myApp', []) .value('SimpleValue', { aaa: '£££' }); 和单元测试 describe('ttt', function() { beforeEach(module('myApp')); it('ttt', inject(function(SimpleValue) { expect(SimpleValue.aaa).toEqual('£££');
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('£££');
});
});
这不是我在每个模块“myApp”之前所期望的行为;。根据文档,在每个规范之前使用模块“myApp”有什么意义:它只是
收集由inject创建喷油器时将使用的配置信息
??我原以为它会重新设置myApp,使其在每个it块上都能正常启动,但事实证明并非如此
有人能解释一下吗?请看一张照片:
使用注册的服务。值不会重置。我不能告诉你为什么,但这似乎出乎意料
var app = angular.module('myApp', [])
// .value('SimpleValue', {aaa: '£££'});
.factory('SimpleValue', function () {
return {aaa: '£££'};
});
例如,使用.factory注册,测试按预期通过
var app = angular.module('myApp', [])
// .value('SimpleValue', {aaa: '£££'});
.factory('SimpleValue', function () {
return {aaa: '£££'};
});
这里的问题是,在第一次测试中,您正在修改对象的属性。但是,重要的是要认识到,在整个系统中,这个对象只有一个副本。以稍微不同的方式重新编写myApp应该会更清楚:
var simpleValue = {aaa: '£££'};
var app = angular.module('myApp', []).value('SimpleValue', simpleValue);
请看,您假设脚本的这一部分作为每个规范的一部分执行,而不是将代码片段只加载到浏览器中一次
希望这篇文章能把整个故事讲清楚:谢谢@user2943490。工厂的工作方式确实不同。这里有一个更新的plunk:。但我并没有告诉此值服务返回前面定义的simpleValue对象。我告诉它创建一个全新的{aaa:'英镑'}对象并返回它。仍然无法理解为什么在模块“myApp”之后不会发生这种情况。