首页 > 解决方案 > 使用 jest 模拟 moment() 和 moment().format

问题描述

我无法模拟moment()moment().format发挥作用。我有状态,currentDateMoment并且currentDateFormatted正在设置如下。

currentDateMoment: moment() //2019-04-23T17:45:26.339Z
currentDateFormatted: moment().format('MM-DD-YYYY').valueOf() //"04-23-2019"

试图在我的快照测试中模拟两者moment()moment().format返回特定日期,但无法。下面试过了。

jest.mock('moment', () => () => '2018–01–30T12:34:56+00:00');

jest.mock('moment', () => ({
  constructor: () => '2018–01–30T12:34:56+00:00'
})); 

jest.mock('moment', () => () => ({ format: () => '01–30-2018' }));

标签: javascriptreactjsunit-testingjestjsmomentjs

解决方案


模拟 moment() 和它使用的任何函数(即.day(), .format())的最简单方法是更改​​引擎盖下使用Datemoment()

在您的测试文件中添加以下代码段

Date.now = jest.fn(() => new Date("2020-05-13T12:33:37.000Z"));

这使得它可以随时moment()在您的测试中调用,moment()认为今天是 2020 年 5 月 13 日,星期三


推荐阅读