【问题标题】: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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-05
      • 2021-04-30
      • 2019-09-07
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多