2015-02-11 11 views
0

У меня есть тестовый пример, как это:Sinon шпион не работает

it("test",function(){ 

     var spy = sinon.spy(test,"method"); 
     decider = 1 
     test.nextServiceTab(); 

     assert(spy.calledOnce); 

    }); 

Когда метод test.nextServiceTab называется, он вызывает method на основе значения decider, который должен быть равен 1. В самом деле управление переходит на method.

Но почему контроль идет до method? Поскольку я шпионю, это не должно быть правильно?

Моя цель состояла в том, чтобы просто проверить, что вызывается method. Где я ошибаюсь?

Является ли способ, которым я пользовался, является правильным?

+0

Вы можете разместить простой вариант вашей реализации nextServiceTab()? – Mark

ответ

0

Если вы хотите избежать контроля ввода функции, вы должны использовать sinon.stub вместо sinon.spy. С заглушкой вы все еще можете увидеть, вызвана ли она, потому что заглушка реализует тот же интерфейс, что и шпион, но дополнительно предотвращает получение исходной функции и контроль над ней.

Например, если вы хотите, чтобы функция всегда возвращает истину:

it("test",function(){ 

    var stub = sinon.stub(test, "method"); 
    stub.returns(true); 

    decider = 1; 
    test.nextServiceTab(); 

    assert(stub.calledOnce); 

    stub.restore(); 

}); 
Смежные вопросы