繁体   English   中英

如何在Sinon中存根匿名函数?

[英]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 需要一个“根对象”,因为它需要替换要在该根对象中存根的函数引用。 REPLthis只能用于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM