使用Sinon时,如何在存根实例中替换存根函数?

时间:2015-10-13 10:07:13

标签: node.js mocha sinon nodeunit

如果我按var a = sinon.createStubInstance(MyContructor)创建了一个实例。

如何替换var stub = sinon.stub(object, "method", func);之类的存根函数。

我这样做的主要原因是希望以this mentioned

实现多个回调变通方法

4 个答案:

答案 0 :(得分:14)

我认为这没有多大意义,因为如果你用另一个存根替换一个存根...那你为什么不用第一个存根来实现你想做的任何事情呢?第二根存根。

无论如何,org.apache.spark.shuffle.FetchFailedException: Failed to connect to ip-10-231-187-233.ec2.internal/10.231.187.233:54801 根据文档执行以下操作:

  

sinon.stub(object, "method", func)取代object.method,包裹在间谍中。像往常一样,func;可用于恢复原始方法。

因此,如果要替换存根实例的存根函数,那么为什么不这样做:

object.method.restore()

或者如果你想创建一个存根而不是间谍:

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

答案 1 :(得分:10)

使用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)方法来覆盖事实后被存根调用的函数会更方便。

答案 2 :(得分:1)

无需覆盖(event) => this.changeInput.bind(event,index),我们可以直接在a.method上使用callsFake

a.method

答案 3 :(得分:0)

从2.0 +

中存储方法的另一种方法



sinon.stub(object, "method").callsFake(func);

object.method.restore()