我可以分配使用Moment.js的“现在”吗?

时间:2019-07-24 22:37:41

标签: javascript unit-testing momentjs

我正在使用moment.js,我想写一个测试说:“如果不输入日期,它将返回now()”。问题在于,每次测试运行时,now()都会是不同的结果。在其他库中,可以设置now()返回的值以进行测试。 moment.js是否提供了一种方法?我一直在谷歌上搜索,没有找到任何表明您是否可以执行此操作的结果。

2 个答案:

答案 0 :(得分:3)

计时员(https://www.npmjs.com/package/timekeeper)满足了这一确切需求。

它会覆盖日期构造函数(该事件在幕后使用),因此它也将暂时起作用。

您可以执行以下操作:

const timekeeper = require('timekeeper');

const freezeDate = new Date();
timekeeper.freeze(freezeDate);

// in your test
expect(result).to.equal(freezeDate);

答案 1 :(得分:0)

您可以通过执行以下from the official momentjs docs来更改每次测试之前的时间源(基本上用新的Date.now覆盖时间实现)。返回自Unix纪元时间(1970年1月1日)起的毫秒数。

moment.now = function () {
    return +new Date();
}