sinon.replace против sinon.stub просто заменить возвращаемое значение? - PullRequest
0 голосов
/ 21 января 2019

При использовании sinon я просто хочу заменить возвращаемое значение моей функции и не нуждаюсь в другой информации, например, сколько раз она была вызвана. Какой из них лучше?

sinon.replace(Component.prototype, 'getValue', () => 123);
const myStub = sinon.stub(Component.prototype, 'getValue');
myStub.return(123);

1 Ответ

0 голосов
/ 22 января 2019

Я редко вижу, чтобы 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

...