2015-10-13 3 views
6

Если я создал экземпляр var a = sinon.createStubInstance(MyContructor).При использовании Sinon, как заменить функцию заглушки в экземпляре заглушки?

Как заменить одну из пронумерованных функций, например var stub = sinon.stub(object, "method", func);.

Основная причина, почему я делаю это хочет достичь многократного обхода обратного вызова this mentioned

ответ

4

Я не думаю, что это делает много смысла, потому что если вы заменяете окурок с другим шлейфом .. то почему бы вам просто не использовать первую заглушку для достижения того, что вы хотите сделать со второй заглушкой.

В любом случае, sinon.stub(object, "method", func) выполняет следующие действия в соответствии с Документами:

Заменяет object.method с func, завернутым в шпионе. Как обычно, object.method.restore(); может использоваться для восстановления исходного метода.

Так что, если вы хотите заменить функцию заглушки экземпляра заглушки, то почему бы вам не сделать:

var a = sinon.createStubInstance(MyConstructor); 
a.method = sinon.spy(function() { return "Foo Bar"; }); 

Или, если вы хотите создать заглушку вместо шпиона:

var a = sinon.createStubInstance(MyConstructor); 
a.method = sinon.stub(); 
+0

Перед одним вызовом, a.method = sinon.stub(), важно вызвать a.method.restore(). – Ajitesh

+1

Напротив, так как этот ответ заставил меня на правильном пути. Хотя после того, как на это был дан ответ, «sinon.stub (object,« method », fn)' устарел. Теперь мы можем использовать 'sinon.stub (object," method "). CallsFake (function() {// do stuff});' Смотрите [здесь] (http://sinonjs.org/releases/v2.3.1/stubs #stubcallsfakefakefunction) _Edit: fixed url_ –

+0

@PhilD. Вы правы, но сам вопрос требует «sinon.stub (object,« method », fn)», поэтому я думаю, что не буду включать эту информацию в сам ответ. – g00glen00b

7

После гася всем объект с помощью sinon.createStubInstance(MyConstructor) или sinon.stub(obj) вы можете только заменить окурок либо присвоения нового окурка объекта (как описано @ g00glen00b) или восстановление заглушки перед повторными заглушками.

var a = sinon.createStubInstance(MyConstructor); 
a.method.restore(); 
sinon.stub(object, "method", func); 

Преимущество этого в том, что вы все еще можете назвать a.method.restore() потом с ожидаемым поведением.

Было бы более удобно, если бы у Stub API был метод .call(func), чтобы переопределить функцию, вызываемую заглушкой после факта.

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