我有以下示例类:
function Example() {...}
Example.prototype.someFunc1() {...}
Example.prototype.someFunc2() {...}
Example.prototype.func(func) {var res = func(); ...}
我通常按以下方式致电Example#func()
:
var example = new Example();
example.func(example.someFunc1)
// or like this, depending on what I want
example.func(example.someFunc2)
现在我在测试中将Example#someFunc1()
存根如下:
var example = new Example();
sinon.stub(example, 'someFunc1').returns(...);
exmaple.func(example.someFunc1);
问题是Example#someFunc1()
没有以这种方式存根并被正常调用。在这种情况下我该怎么办?
答案 0 :(得分:1)
在您的示例中,您保存对该函数的引用。然后你把它存根。
您正在传递对原始函数的引用,而不是存根函数。
你存根的功能在你存根时不会消失 - 这就是你以后可以restore()
的原因。您需要传递对象函数本身的引用,例如
sinon.stub(example, 'opt1').returns(42);
example.logic([3, 2], example.opt1);
或者传递对存根的引用,例如,
var fn = sinon.stub(example, 'opt1').returns(42);
example.logic([3, 2], fn);
然而,后者作为测试并没有任何意义;你可以传递任何函数,没有理由存根。
FWIW,你的小提琴远不及你发布的原始代码。
目前还不清楚你要测试的是什么:你传递一个函数引用 - 这可能是任何旧函数,无论它是否附加到Example
对象,例如,匿名函数都可以。< / p>
如果被测试的函数本身称为存根函数,则存根是有意义的。