Javascript Jest快照在计算机时间戳(AM/PM)上测试失败
我有一个jest测试在日期和时间上失败,我认为这是因为运行它的用户的计算机设置不同。这是一个快照测试,不是一个精确的失败,因为我们想显示用户的时区Javascript Jest快照在计算机时间戳(AM/PM)上测试失败,javascript,reactjs,jestjs,snapshot,Javascript,Reactjs,Jestjs,Snapshot,我有一个jest测试在日期和时间上失败,我认为这是因为运行它的用户的计算机设置不同。这是一个快照测试,不是一个精确的失败,因为我们想显示用户的时区 -2019年7月26日上午11:59:42 +2019年7月26日11:59:42在节点(v12及以下版本)上运行jest时,它没有完全本地化。您可能需要安装。 然后您可以在package.json上设置测试脚本,如下所示 NODE\u ICU\u DATA=NODE\u模块/完整ICU笑话 您可以阅读该表,该表描述了它在此节点上不支持区域设置 请
-2019年7月26日上午11:59:42
+2019年7月26日11:59:42
在节点(v12及以下版本)上运行jest时,它没有完全本地化。您可能需要安装。
然后您可以在package.json上设置测试脚本,如下所示
NODE\u ICU\u DATA=NODE\u模块/完整ICU笑话
您可以阅读该表,该表描述了它在此节点上不支持区域设置
请注意,在节点14处,Its现在配备了内置ICU。因此,如果你的应用程序可以在v14上运行。下载带有nvm的v14并再次尝试运行。如果不去全icu模拟本地化支持,我最终只需要模拟日期和时间功能
jest
.spyOn(Date.prototype, 'toLocaleTimeString')
.mockImplementation(() => '12:00:00');
jest
.spyOn(Date.prototype, 'toLocaleDateString')
.mockImplementation(() => 'AM 1/01/2021');
您可以模拟
日期
如果您使用这种方法,您可以根据自己的需要完全定制它
// jest.config.js
{
// ...
setupFilesAfterEnv: [
"./mocks/date.js"
]
}
您是否考虑过只使用
date fns
进行可配置和确定的时间格式设置?@ChristianIvicevic时间格式按照我希望的方式工作,但它只是让测试使用相同的区域设置和时间戳运行。我正在运行节点v15.14.0我更喜欢在globalconfig中设置它,或者不添加额外的库。我不知道为什么节点15不工作
// mocks/date.js
class MockDate {
...
}
let RealDate;
beforeAll(() => {
RealDate = global.Date;
global.Date = MockDate;
});
afterAll(() => {
global.Date = RealDate;
});