Javascript 在Jest测试中设置时刻时区
我有一个util函数,它解析特定日期格式的给定日期(即“2019-01-28”),然后使用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')
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依赖项中可能对您有用。如果有人需要解决该问题,我可以推荐时区模拟库-。