If I have create a instance by var a = sinon.createStubInstance(MyContructor)
.
How can I replace one of the stubbed function like var stub = sinon.stub(object, "method", func);
.
The main reason I am doing this is want to achieve multiple callback workaround as this mentioned
The method you mentioned (sinon.stub(object, "method", func)
) is a method that was available in version 1.x, and did the following according to the documentation:
Replaces
object.method
with afunc
, wrapped in a spy. As usual,object.method.restore()
; can be used to restore the original method.
However, if you're using sinon.createStubInstance()
, all methods are already stubbed. That means you can already do certain things with the stubbed instance. For example:
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.getName = function() {
return this.firstname + " " + this.lastname;
}
const p = sinon.createStubInstance(Person);
p.getName.returns("Alex Smith");
console.log(p.getName()); // "Alex Smith"
If you really want to replace a stub by another spy or stub, you could assign the property to a new stub or spy:
const p = sinon.createStubInstance(Person);
p.getName = sinon.spy(function() { return "Alex Smith"; }); // Using a spy
p.getName = sinon.stub(); // OR using a stub
With Sinon.js 2.x and higher, it's even easier to replace a stubbed function by using the callsFake()
function:
p.getName.callsFake(function() { return "Alex Smith"; });