在使用Sinon时,如何replace存根实例中的存根函数?
如果我通过var a = sinon.createStubInstance(MyContructor)
创build一个实例。
我怎样才能取代一个var stub = sinon.stub(object, "method", func);
函数像var stub = sinon.stub(object, "method", func);
。
我这样做的主要原因是要实现多个callback的解决方法, 如上所述
我不认为这样做有很大的意义,因为如果你用另一个存根replace一个存根,那么为什么不用第一个存根来实现你想要做的第二个存根。
无论如何, sinon.stub(object, "method", func)
根据文档进行以下操作:
用一个包含在间谍中的
func
替代object.method
。 像往常一样,object.method.restore()
; 可以用来恢复原来的方法。
所以,如果你想replace一个存根实例的存根函数,那么你为什么不做:
var a = sinon.createStubInstance(MyConstructor); a.method = sinon.spy(function() { return "Foo Bar"; });
或者,如果你想创build一个存根,而不是间谍:
var a = sinon.createStubInstance(MyConstructor); a.method = sinon.stub();
在使用sinon.createStubInstance(MyConstructor)
或sinon.stub(obj)
对整个对象进行存根化之后,只能通过为属性分配新的存根(如@ g00glen00b所述)或在重新存根之前还原存根来replace存根。
var a = sinon.createStubInstance(MyConstructor); a.method.restore(); sinon.stub(object, "method", func);
这样做的好处是,您仍然可以调用a.method.restore()
然后执行预期的行为。
如果Stub API有一个.call(func)
方法来覆盖事实之后由存根调用的函数,那将会更方便一些。