2014-02-09 2 views
1

Im тестирует некоторые единицы в моем js-коде, используя Sinon.Sinon.js устанавливает точное поведение макета

И вопрос в том, как я могу изменить поведение метода mocked object?

Например, у меня есть объект, который имеет метод reject. Я хочу, чтобы он возвращал некоторую рассчитанную ценность и ожидал, что он однажды вызвал правильный контекст. Я делаю на следующие:

var myObj = {reject: function(){ 
    // here original behavior 
}}; 

sinon.stub(myObj, 'reject', function() { 
    // here my test behavior 
}); 

sinon.mock(myObj).expects('reject').once().on(someContext); 

Но в конце концов им получать сообщение об ошибке: TypeError: Attempted to wrap reject which is already spied on

Как я могу решить мою задачу?

Спасибо!

ответ

1

Похоже, вы пытаетесь заглушить метод ДВАЖДЫ. Вы хотели бы добавить свои ожидания в результате первого пня:

var myObj = {reject: function(){ 
    // here original behavior 
}}; 

myObjStub = sinon.stub(myObj, 'reject', function() { 
    // here my test behavior 
}); 

myObjStub.once().on(someContext); 

Я думаю если вы хотите, чтобы в основном заглушки пользовательского поведения («здесь мой тест поведение», а затем убедитесь, что она вызывается один раз вы:..?

var myObj = {reject: function(){ 
    // here CUSTOM behavior 
}}; 

myObjStub = sinon.mock(myObj); 
myObjStub.once().on(someContext); 
+0

Да, это работает отлично, Но, как сказала документация, издевается апи расширяет заглушки Как я могу сделать то же самое с помощью насмешливых, что объект Спасибо, все равно =) – gobwas

+1

хмм, так. ..Вы хотите, в основном, заглушить пользовательское поведение («здесь мое тестовое поведение», а затем убедиться, что он вызывается один раз? – dsummersl

+0

Да, но с макетом =) Его невозможно?) – gobwas

Смежные вопросы