我只想在使用一定数量的参数调用时对函数进行存根。例如:
moment.utc()
(不带参数)应始终返回Moment(“ 2018-01-01 ...”)moment.utc("2015-01-02")
(带有参数)应调用原始函数并返回Moment(“ 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();