Я редко вижу, чтобы sinon.replace
использовался во многих проектах. Преимущество использования stub
заключается в том, что вы можете, например, многократно изменять возвращаемое значение.
let getValueStub;
before(function() {
getValueStub = sinon.stub(Component.prototype, 'getValue');
})
after(function() {
sinon.restore();
})
it('test case A if return value is 123', function() {
getValueStub.returns(123);
// do expectation
})
it('test case B if return value is 234', function() {
getValueStub.returns(234);
// do expectation
})
Между тем, для replace
, основываясь на документации Sinon, вы можете использовать его только один раз.
sandbox.replace (объект, собственность, замена);
Заменяет свойство объекта на аргумент замены. Пытается
заменить уже замененное значение, вызвать исключение.
замена может быть любого значения, включая шпионов, окурков и подделок.
Например:
sinon.replace(Component.prototype, 'getValue', function () {
return 123;
});
sinon.replace(Component.prototype, 'getValue', function () { // this will return error
return 456;
});
вернется ошибка
TypeError: Attempted to replace getValue which is already replaced
Вы, вероятно, можете добиться того же, что и заглушка, с помощью sinon.replace
, заменив функцию заглушкой
getValueStub = sinon.stub();
sinon.replace(Component.prototype, 'getValue', getValueStub);
getValueStub.returns(123);
getValueStub.returns(456);
Тем не менее, я предпочитаю использовать sinon.stub
из-за простоты.
Справка:
https://sinonjs.org/releases/v7.2.2/sandbox/#sandboxreplaceobject-property-replacement