Sinon存根函数仅在使用一定数量的参数调用时

时间:2019-02-05 14:14:49

标签: javascript unit-testing sinon

我只想在使用一定数量的参数调用时对函数进行存根。例如:

  • 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;

使用withArgscallThrough的存根:

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();

0 个答案:

没有答案