我正在尝试学习这项技术,但不知何故被卡在了开头。
请告诉我为什么这个测试不起作用。我错过了什么明显的事情?
var myfunc = function() {
alert('hello');
}
test("should spy on myfunc", function() {
var mySpy = sinon.spy(myfunc);
myfunc();
sinon.assert.calledOnce(mySpy);
});
这是 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);
});
您的测试不起作用的原因是因为您没有调用间谍,而是调用原始函数。
@carbontax 的示例之所以有效,是因为在这种情况下,o.myfunc
它会被间谍自动替换;所以当你调用时o.myfunc
,你实际上是在调用间谍。
As Mrchief said, you are not invoking spy
but calling myfunc();
, you should invoke spy something like.
test("should spy on myfunc", function() {
var mySpy = sinon.spy(myfunc);
mySpy(); // <= should called instead of myfunc()
sinon.assert.calledOnce(mySpy);
});