Я хочу заглушить функцию только при вызове с определенным количеством аргументов.Например:
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();