javascript - 在 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.mock
to 替换moment
used by getApiDateFormat
by ,但是,我所有的尝试都失败了,因为它们对导入的 libmoment.tz.setDefault("America/New_York")
没有影响。moment
getApiDateFormat
如何解决这样的问题并正确测试?
解决方案
使用TZ
环境变量...
您可以预先设置package.json
所有机器使用相同的时区运行,如下所示:
"scripts": {
"test": "TZ=UTC jest",
"coverage": "TZ=UTC jest --coverage"
},
推荐阅读
- python - 雅典娜:在 python 中“创建外部表”的输入没有可行的替代方案
- php - 带有 JQUERY 函数的动态 ID
- sql - 在 SQL Server 中分离列值
- python - 如何将列表作为参数传递给数据类?TypeError: __init__() 缺少必需的位置参数
- node.js - Domino AppDev Pack TypeError:database.useAgent 不是函数
- robotframework - 在机器人框架中获取执行期间传递的标记名值
- java - 无法使用 liquibase 填充数据库
- git - 为什么我没有看到分支合并到源树中?
- javascript - 当我单击提交时,如何阻止电子邮件验证弹出窗口出现?
- node.js - SQLite 返回 int 而不是 real