1

我正在尝试学习这项技术,但不知何故被卡在了开头。

请告诉我为什么这个测试不起作用。我错过了什么明显的事情?

var myfunc = function() {
    alert('hello');
}

test("should spy on myfunc", function() {
    var mySpy = sinon.spy(myfunc);
    myfunc();
    sinon.assert.calledOnce(mySpy);

});
4

3 回答 3

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); 
});
于 2013-10-28T12:21:08.127 回答
1

您的测试不起作用的原因是因为您没有调用间谍,而是调用原始函数。

@carbontax 的示例之所以有效,是因为在这种情况下,o.myfunc它会被间谍自动替换;所以当你调用时o.myfunc,你实际上是在调用间谍。

于 2013-10-29T19:48:17.393 回答
1

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);
});
于 2014-04-12T09:32:08.353 回答