Jest
是一个流行的 JavaScript 测试框架,它提供了许多用于模拟和测试的工具。setSystemTime
是 Jest 中的一个实验性功能,它允许你在测试环境中设置系统时间。然而,这个功能并不支持在全局作用域中使用,因为它可能会对整个测试环境产生不可预知的影响。
setSystemTime
允许你在测试中模拟特定的时间点或时间流逝,这对于测试与时间相关的功能(如定时器、日期处理等)非常有用。
setSystemTime
不支持全局作用域?setSystemTime
应该在每个测试用例或测试文件的范围内使用,而不是在全局作用域中。你可以使用 beforeEach
或 beforeAll
钩子来设置时间,并在测试结束后重置时间。
// 假设你有一个函数依赖于当前时间
function getNextHourDate() {
const now = new Date();
return new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours() + 1, 0, 0);
}
test('getNextHourDate should return the next hour date', () => {
// 设置当前时间为 2023-10-01T10:00:00Z
jest.setSystemTime(new Date('2023-10-01T10:00:00Z'));
expect(getNextHourDate()).toEqual(new Date('2023-10-01T11:00:00Z'));
// 测试结束后,Jest 会自动重置系统时间
});
通过这种方式,你可以在每个测试用例中独立地设置和重置系统时间,从而确保测试的隔离性和可预测性。
领取专属 10元无门槛券
手把手带您无忧上云