Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Jest测试中设置时刻时区_Javascript_Date_Mocking_Jestjs_Momentjs - Fatal编程技术网

Javascript 在Jest测试中设置时刻时区

Javascript 在Jest测试中设置时刻时区,javascript,date,mocking,jestjs,momentjs,Javascript,Date,Mocking,Jestjs,Momentjs,我有一个util函数,它解析特定日期格式的给定日期(即“2019-01-28”),然后使用momentJS检索当天的开始并将其转换为ISO日期格式: dates.js import moment from 'moment' export const getApiDateFormat = (date, dateFormat = getLocaleDateString()) => moment(date, dateFormat) .startOf('day')

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

dates.js

import moment from 'moment'

export const getApiDateFormat = (date, dateFormat = getLocaleDateString()) =>
    moment(date, dateFormat)
      .startOf('day')
      .toISOString()
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,
      )
    })
我想使用
Jest
测试此函数,并设置
时刻的特定时区,以独立于我的位置使用这些测试

目前,我有:

dates.test.js

import moment from 'moment'

export const getApiDateFormat = (date, dateFormat = getLocaleDateString()) =>
    moment(date, dateFormat)
      .startOf('day')
      .toISOString()
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,
      )
    })
因为我目前在
欧洲/华沙
时区。如何使此测试位置独立

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


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

使用
TZ
env var

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

  "scripts": {
    "test": "TZ=UTC jest",
    "coverage": "TZ=UTC jest --coverage"
  },
这对我有用

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

但请确保“时刻时区”:“^0.5.27”安装在您的npm依赖项中

可能对您有用。如果有人需要解决该问题,我可以推荐时区模拟库-。