Функция заглушки Sinon только при вызове с определенным количеством аргументов - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу заглушить функцию только при вызове с определенным количеством аргументов.Например:

  • moment.utc() (без аргументов) должен ВСЕГДА возвращать момент ("2018-01-01 ...")
  • moment.utc("2015-01-02") (с аргументом) должен вызыватьИсходная функция и момент возврата ("2015-01-02 ...")

Я нашел два способа, которые работают для меня.Просто интересно, что считается лучшей практикой.

Заглушка с использованием callFake:

const now = moment.utc("2019-01-01");
const originalUtc = moment.utc;

sinon.stub(moment, "utc").callsFake((...args) => {
  if (args.length === 0) {
    return now;
  }
  return originalUtc(...args);
});

console.log(moment.utc()); // Moment("2019-01-01...")
console.log(moment.utc("2015-01-29")); // Moment("2015-01-29...")

moment.utc = originalUtc;

Заглушка с использованием withArgs и callThrough:

const now = moment.utc("2019-01-01");

const utcStub = sinon.stub(moment, "utc");
utcStub.withArgs(sinon.match.defined);
utcStub.withArgs().returns(now);
utcStub.callThrough();

console.log(moment.utc()); // Moment("2019-01-01...")
console.log(moment.utc("2015-01-29")); // Moment("2015-01-29...")

utcStub.restore();
...