由于夏令时更改而导致测试失败
Failing tests because of the daylight saving time change
我在 react-testing-library
中使用 getByText
函数进行了测试。
我正在寻找 DOM 中具有值 "10-10-2020 12:00"
的元素。
但是在夏令时更改后,我所有的测试都失败了,因为由于更改,显示文本已更改为 "10-10-2020 13:00"
(向前一小时),现在我无法获取这些元素。我将不得不更新我的测试,但是当冬天更改时间时,它们显然会再次失败。
它的发生是因为例如new Date('2020-01-01T00:00:00.000Z')
returns 01 01 2020 01:00:00
而不是 01 01 2020 00:00:00
因为时区。
是否有任何解决方法或修复程序使我的测试能够抵抗夏令时变化和时区?
Setting the hardcoded jest
的日期和时间应该有帮助:
jest.useFakeTimers('modern')
beforeEach(() => {
const hardcodedDate = new Date('2022-03-20T12:00:00Z')
jest.setSystemTime(hardcodedDate.getTime())
})
这意味着在您的测试中您将始终拥有相同的系统时间,这将有助于夏令时更改(或任何时间更改)
UPD:要在夏令时之前查看测试中的日期,您应该在开始前更改硬编码的日期(例如在英国是 3 月 27 日)
我在 react-testing-library
中使用 getByText
函数进行了测试。
我正在寻找 DOM 中具有值 "10-10-2020 12:00"
的元素。
但是在夏令时更改后,我所有的测试都失败了,因为由于更改,显示文本已更改为 "10-10-2020 13:00"
(向前一小时),现在我无法获取这些元素。我将不得不更新我的测试,但是当冬天更改时间时,它们显然会再次失败。
它的发生是因为例如new Date('2020-01-01T00:00:00.000Z')
returns 01 01 2020 01:00:00
而不是 01 01 2020 00:00:00
因为时区。
是否有任何解决方法或修复程序使我的测试能够抵抗夏令时变化和时区?
Setting the hardcoded jest
的日期和时间应该有帮助:
jest.useFakeTimers('modern')
beforeEach(() => {
const hardcodedDate = new Date('2022-03-20T12:00:00Z')
jest.setSystemTime(hardcodedDate.getTime())
})
这意味着在您的测试中您将始终拥有相同的系统时间,这将有助于夏令时更改(或任何时间更改)
UPD:要在夏令时之前查看测试中的日期,您应该在开始前更改硬编码的日期(例如在英国是 3 月 27 日)