hello
является свойством экземпляра ...
... поэтому новая функция создается и добавляется как свойство hello
каждого нового экземпляра.
Так что для насмешки требуется экземпляр:
const sinon = require('sinon');
function A () {
this.hello = function() { // <= hello is an instance property
console.log("hello");
}
}
it('should stub hello', () => {
const a = new A(); // <= create an instance
sinon.stub(a, 'hello').callsFake(() => console.log("stubbed")); // <= stub the instance property
a.hello(); // <= logs 'stubbed'
});
Если hello
изменен на метод-прототип , его можно заглушить для всех экземпляров:
const sinon = require('sinon');
function A () {
}
A.prototype.hello = function() { // <= hello is a prototype method
console.log("hello");
}
it('should stub hello', () => {
sinon.stub(A.prototype, 'hello').callsFake(() => console.log("stubbed")); // <= stub the prototype method
new A().hello(); // <= logs 'stubbed'
});
Обратите внимание, что подход метода-прототипа эквивалентен следующему коду ES6:
class A {
hello() {
console.log("hello");
}
}
... кажется, что это может быть то, как вы намеревались определить hello
.