2013-10-27 3 views
2

Я пытаюсь изучить эту технику и как-то застревать в открытии.Ошибка SinonJS 101

Пожалуйста, сообщите мне, почему этот тест не работает. Какая очевидная вещь я пропустил?

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

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

}); 
+0

Это выглядит правильно для меня. Какой результат вы получаете? – Brett

ответ

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

Причина, по которой ваш тест не работает, заключается в том, что вы не вызываете шпиона, а скорее из исходной функции.

И причина, по которой работает пример @ carbontax, заключается в том, что в этом случае o.myfunc заменяется шпионом автоматически; поэтому, когда вы вызываете o.myfunc, вы на самом деле ссылаетесь на шпиона.

1

Как сказал г-н., Вы не вызываете spy, но при вызове myfunc(); вам следует вызвать что-то вроде шпиона.

test("should spy on myfunc", function() { 
    var mySpy = sinon.spy(myfunc); 
    mySpy(); // <= should called instead of myfunc() 
    sinon.assert.calledOnce(mySpy); 
}); 
Смежные вопросы