【问题标题】:Set moment timezone in Jest tests在 Jest 测试中设置时刻时区
【发布时间】:2019-05-23 11:43:46
【问题描述】:

我有 util 函数以特定日期格式解析给定日期(即“2019-01-28”),然后使用 momentJS 检索当天的开始并将其转换为 ISO 日期格式:

dates.js

import moment from 'moment'

export const getApiDateFormat = (date, dateFormat = getLocaleDateString()) =>
    moment(date, dateFormat)
      .startOf('day')
      .toISOString()

我想使用Jest 测试此功能,并为moment 设置特定时区,以便独立于我的位置使用这些测试。

目前,我有:

dates.test.js

const formattedDate = '2019-01-27T23:00:00.000Z'

test('date in russian format - 28.01.2019', () => {
      const russianDateFormat = 'DD.MM.YYYY'
      expect(getApiDateFormat('28.01.2019', russianDateFormat)).toEqual(
        formattedDate,
      )
    })

因为我目前位于Europe/Warsaw 时区。如何让这个测试位置独立?

我尝试使用jest.mockgetApiDateFormat 使用的moment 替换为moment.tz.setDefault("America/New_York"),但是,我的所有尝试都失败了,因为它们对getApiDateFormat 导入的moment 库没有影响。

如何解决这样的问题并正确测试?

【问题讨论】:

标签: javascript date mocking jestjs momentjs


【解决方案1】:

使用TZ 环境变量...

您可以添加到您的 package.json 前面,这样所有机器都可以使用相同的时区运行,如下所示:

  "scripts": {
    "test": "TZ=UTC jest",
    "coverage": "TZ=UTC jest --coverage"
  },

【讨论】:

  • 它可以在 Windows 机器上运行吗?我试过了,但没有用。
  • @DanielNguyen 不,这个不适用于 Windows 的 Node 版本低于 17。更多信息:github.com/nodejs/node/issues/4230
【解决方案2】:

这对我有用

 "scripts": {
   "test": "TZ=UTC jest",
   "coverage": "TZ=UTC jest --coverage"
 }

但确保 "moment-timezone": "^0.5.27" 安装在你的 npm 依赖项中

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2018-08-30
    • 2021-06-20
    • 2020-08-06
    相关资源
    最近更新 更多