嵌套描述函数中对象的单个模拟(茉莉花
single mock of object in nested describe functions (jasmine
如果我有一个带有嵌套描述方法的 jasmine 规范,并且我想在一个方法上放置一个 spy,以获得它 return 一个特定的结果,那么在所有方法中,正确的方法是什么?我知道我可以简单地在顶级方法中定义间谍,但是,这是否意味着我的一些测试获得了相同的对象?我不希望在另一个测试中维护一个测试的更改,即使它允许代码重用。
所以,如果我有这样的事情:
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 定义了它,而 beforeEach 在开始任务 A 时定义了 FOO 运行 但仅限 FOO,因此 sub1 和 sub2 共享相同的 FOO。对吗?
假设它是正确的,我怎样才能在 describe 的最顶层添加一个间谍,同时还要确保每次在测试中使用该对象时都生成新的对象,每次都只生成所需的间谍?
使用 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();
});
});
如果我有一个带有嵌套描述方法的 jasmine 规范,并且我想在一个方法上放置一个 spy,以获得它 return 一个特定的结果,那么在所有方法中,正确的方法是什么?我知道我可以简单地在顶级方法中定义间谍,但是,这是否意味着我的一些测试获得了相同的对象?我不希望在另一个测试中维护一个测试的更改,即使它允许代码重用。
所以,如果我有这样的事情:
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 定义了它,而 beforeEach 在开始任务 A 时定义了 FOO 运行 但仅限 FOO,因此 sub1 和 sub2 共享相同的 FOO。对吗?
假设它是正确的,我怎样才能在 describe 的最顶层添加一个间谍,同时还要确保每次在测试中使用该对象时都生成新的对象,每次都只生成所需的间谍?
使用 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();
});
});