如果我有一个带有嵌套的describe方法的jasmine规范,并且我想在方法上放置一个间谍,让它返回一个特定的结果,一旦跨越所有方法,什么是正确的方法?我知道我可以简单地在顶级方法中定义间谍,但是,这是否意味着我的一些测试获得了相同的对象?我不希望在另一个测试中保持更改,即使它允许代码重用。
所以,如果我有这样的事情:
describe ('tope level test', function(){
var FOO;
beforeEach( module ('FooBar') );
beforeEach( inject (function( _Foo_){
FOO=_Foo_;
FOO.bar=jasmine.createSpy('foobar').andReturn("baz");
}));
describe('test A', function(){
if('sub1', function(){
FOO.newMethod=function() {'this shouldn't exist'};
});
if('sub2', function(){
FOO.newMethod();
});
})]);
我认为sub2能够访问newMethod,因为sub1定义了它,并且定义FOO的beforeEach仅在启动任务A但仅在FOO运行,因此sub1和sub2共享相同的FOO。这是对的吗?
假设它是正确的,我怎么能在最高级别的描述中添加间谍,同时还确保每次在测试中使用时都会生成对象,每次只需要所需的间谍?
答案 0 :(得分:0)
使用Object.create()创建对象的新实例:
describe ('tope level test', function(){
var FOO;
beforeEach( module ('FooBar') );
beforeEach( inject (function( _Foo_){
FOO = Object.create(_Foo_);
FOO.bar = jasmine.createSpy('foobar').andReturn("baz");
});
describe('test A', function(){
if('sub1', function(){
FOO.newMethod = function() {'this shouldn\'t exist'};
expect(FOO.bar).toBeDefined();
expect(FOO.newMethod).toBeDefined();
});
if('sub2', function(){
expect(FOO.bar).toBeDefined();
expect(FOO.newMethod).not.toBeDefined();
});
});