我有一个玩笑测试在日期和时间上失败,我认为这是因为运行它的用户的计算机设置不同。这是一个快照测试,并不是准确的失败,因为我们想显示用户所在的任何时区。
- 11:59:42 AM 7/26/2019
+ 11:59:42 26/07/2019
在我的代码中,有一个 getTimeValue 用于使用 point.timestamp.toDate().toLocaleTimeString() 将日期格式化为时间。
let mockDate;
beforeAll(() => {
mockDate = jest.spyOn(Date.prototype, 'toLocaleTimeString').mockReturnValue('2020-04-15');
});
afterAll(() => {
mockDate.mockRestore();
});
编辑:我意识到这个项目中已经有一个 globalsetup.ts 文件正在处理时区,所以问题实际上在于时间戳(AM、PM)和日期格式。
我最终只需要模拟日期和时间函数。
jest
.spyOn(Date.prototype, 'toLocaleTimeString')
.mockImplementation(() => '12:00:00');
jest
.spyOn(Date.prototype, 'toLocaleDateString')
.mockImplementation(() => 'AM 1/01/2021');
我们可以通过设置
TZ
环境变量来更改 CLI 中 Node.js 运行时的默认时区。有关更多详细信息,请参阅 Node.js CLI 文档。
就我而言,我使用
cross-env
CLI 设置 TZ
环境变量:
...
"test": "cross-env TZ=UTC jest"
...