我正在尝试学习这种技术并以某种方式卡在开头。
请告诉我为什么这个测试不起作用。我错过了什么明显的事情?
var myfunc = function() {
alert('hello');
}
test("should spy on myfunc", function() {
var mySpy = sinon.spy(myfunc);
myfunc();
sinon.assert.calledOnce(mySpy);
});
答案 0 :(得分:2)
这是myfunc的范围。这有效:
var o = {
myfunc: function() {
alert('hello');
}
};
test("should spy on myfunc", function() {
var mySpy = sinon.spy(o, "myfunc");
o.myfunc();
sinon.assert.calledOnce(mySpy);
ok(true);
});
答案 1 :(得分:1)
您的测试不起作用的原因是因为您没有调用间谍,而是调用原始函数。
@ carbontax的例子起作用的原因是因为在这种情况下,o.myfunc
会自动被间谍取代;所以当你调用o.myfunc
时,你实际上是在调用间谍。
答案 2 :(得分:1)
正如先生所说,你没有调用spy
而是调用myfunc();
,你应该调用类似的间谍。
test("should spy on myfunc", function() {
var mySpy = sinon.spy(myfunc);
mySpy(); // <= should called instead of myfunc()
sinon.assert.calledOnce(mySpy);
});