SinonJS 101错误

时间:2013-10-27 05:51:44

标签: qunit sinon

我正在尝试学习这种技术并以某种方式卡在开头。

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

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

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

});

3 个答案:

答案 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);
});