首页 > 解决方案 > 在 Jest 测试中设置时刻时区

问题描述

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

日期.js

import moment from 'moment'

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

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

目前,我有:

日期.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.mockto 替换momentused by getApiDateFormatby ,但是,我所有的尝试都失败了,因为它们对导入的 libmoment.tz.setDefault("America/New_York")没有影响。momentgetApiDateFormat

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

标签: javascriptdatemockingjestjsmomentjs

解决方案


使用TZ环境变量...

您可以预先设置package.json所有机器使用相同的时区运行,如下所示:

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

推荐阅读