在Jest测试中设置时刻时区

时间:2019-05-23 11:43:46

标签: javascript date mocking jestjs momentjs

我具有util函数,该函数以特定的日期格式解析给定的日期(即'2019-01-28'),然后使用{ "bindings": [ { //... "direction": "in" }, { "name": "outputSbQueue1", "type": "serviceBus", "queueName": "testqueue1", "connection": "MyServiceBusConnection", "direction": "out" }, { "name": "outputSbQueue2", "type": "serviceBus", "queueName": "testqueue2", "connection": "MyServiceBusConnection", "direction": "out" } ], "disabled": false } 检索当天的开始并将其转换为ISO日期格式:

dates.js

momentJS

我想使用import moment from 'moment' export const getApiDateFormat = (date, dateFormat = getLocaleDateString()) => moment(date, dateFormat) .startOf('day') .toISOString() 测试此功能,并为Jest设置特定时区,以独立于我的位置使用这些测试。

目前,我有:

dates.test.js

moment

因为我当前位于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/Warsawjest.mock所使用的moment替换为getApiDateFormat,但是,我的所有尝试都失败了,因为它们对{{ 1}}库,由moment.tz.setDefault("America/New_York")导入。

如何解决此类问题并进行正确测试?

2 个答案:

答案 0 :(得分:3)

使用vue-router环境变量...

您可以在TZ之前添加前缀,以便所有计算机在相同的时区运行,如下所示:

package.json

答案 1 :(得分:1)

这对我有用

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

但是请确保在您的npm依赖项中安装了“ moment-timezone”:“ ^ 0.5.27”