背景
如果我有以下模块:
this_module: {
foo: {};
set_this_foo: function () {
this.foo.boo = 'something';
return this.foo;
}
}并使用重丝导入私有函数,然后使用Sinon.js对该函数进行单元测试。
var set_this_foo = app.__get__('this_module.set_this_foo');
var spy = sinon.spy(set_this_foo);
spy();
expect(spy).to.have.returned({boo: 'something'});我得到了错误消息:
TypeError:无法设置未定义的属性“boo”
因为this最终具有全局对象的值。在运行测试之前,我可以通过定义一个名为foo的全局变量来解决这个问题,但是不希望污染全局命名空间。
问题
是否有一种(优雅的)方法来定义this相对于spy()的值
发布于 2016-03-01 10:25:46
我会采取一些不同的做法:
var myModule = app.__get__('this_module');
var spy = sinon.spy(myModule, 'set_this_foo');
myModule.set_this_foo();
expect(spy).to.have.returned({ boo : 'something' });因为您也可以通过使用原始的方法名(除了spy)来引用间谍,所以调用它将确保在正确的上下文中调用它。
https://stackoverflow.com/questions/35719172
复制相似问题