【问题标题】:Can I assign what "now" is using Moment.js?我可以使用 Moment.js 分配什么“现在”吗?
【发布时间】:2019-07-24 22:37:41
【问题描述】:
我正在使用 moment.js,我想编写一个测试,“如果你没有传递一个日期,它会返回 now()”。问题是,每次测试运行时,now() 都会得到不同的结果。在其他库中,您可以设置 now() 将返回用于测试目的的内容。 moment.js 是否提供了一种方法来做到这一点?我一直在谷歌搜索,但没有找到任何表明您是否可以这样做的结果。
【问题讨论】:
标签:
javascript
unit-testing
momentjs
【解决方案1】:
Timekeeper (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);
【解决方案2】:
您可以在每次测试之前通过执行以下from the official momentjs docs 更改时间源(基本上用新的Date.now 覆盖实现)。这将返回自 unix 纪元时间 (1/1/1970) 以来的毫秒数。
moment.now = function () {
return +new Date();
}