[英]How can I stub an anonymous function in Sinon?
下列:
const sinon = require('sinon')
const a = () => { return 1 }
sinon.stub(a)
抛出TypeError: Attempted to wrap undefined property undefined as function
。
如果有一个对象, stub
工作,所以我尝试使用this
。 在node.js REPL(v6.11)中:
> const a = () => { return 1 }
undefined
> this.a
[Function: a]
但是,在我的mocha规范中,它失败了:
const a = () => { return 1 }
console.log(a)
// => [Function: a]
console.log(this.a)
// => undefined
我错过了什么? 我怎样才能做到这一点?
顺便说一句:我知道我可以stub
一个对象的方法,比如: const stub = sinon.stub(object, 'a')
,但这不是我在这里提出的问题。
你无法让它像这样工作。 对于存根,Sinon 需要一个“根对象”,因为它需要替换要在该根对象中存根的函数引用。 REPL
的this
只能用于REPL的实现方式。 在最新的节点(v8)中,它不再像所描述的那样自动将函数绑定this
。
sinon.stub接受一个对象然后你可以存根属性。 所以你应该能做到
const obj = {
a: (() => return 1; })
};
然后就可以打电话了
const stub = sinon.stub(obj, "a");
正如您所见,您将const a
设置为示例中的函数 - 它需要是一个对象,然后sinon
可以存根该对象中的特定属性。 我相信这样做的原因是它给了它一些sinon可以引用的东西,因此sinon
也可以支持像object.method.restore()
这样的东西。
另一个解决方法是绑定到this
你自己(虽然不推荐):
const a = () => { return 1 }
this.a = a;
sinon.stub(this, 'a').returns(2);
console.log(this.a());
// => 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.