如果我通过var a = sinon.createStubInstance(MyContructor)
创建实例。使用Sinon时,如何替换存根实例中的存根函数?
我该如何更换var stub = sinon.stub(object, "method", func);
之类的残存功能之一。
主要的原因,我这样做是想实现多回调的解决方法为this mentioned
如果我通过var a = sinon.createStubInstance(MyContructor)
创建实例。使用Sinon时,如何替换存根实例中的存根函数?
我该如何更换var stub = sinon.stub(object, "method", func);
之类的残存功能之一。
主要的原因,我这样做是想实现多回调的解决方法为this mentioned
我不认为这确实让很多的意义,因为如果你用另一个存根替换存根..那你为什么不用第一个存根来实现你想要做的第二个存根。
反正,所述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();
磕碰使用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)
方法覆盖存根后由存根调用的函数将会更方便。
在调用a.method = sinon.stub()之前,调用a.method.restore()很重要。 – Ajitesh
这个答案让我走上了正轨。虽然这是回答'sinon.stub(object,“method,fn)'已被弃用。我们现在可以使用'sinon.stub(object,“method”)。callsFake(function(){// do stuff});'See [here](http://sinonjs.org/releases/v2.3.1/stubs #stubcallsfakefakefunction) _Edit:fixed url_ –
@PhilD。你是对的,但问题本身是要求'sinon.stub(object,“method”,fn)',所以我认为我不会在答案中包含这些信息。 – g00glen00b