我正在将Enzyme与酶转json一起使用来对React组件进行Jest快照测试。我正在测试一个DateRange组件的浅表快照,该组件使用当前范围(例如5/20/2016 - 7/18/2016)渲染一个显示字段,并DateInput允许两个组件选择一个Date值。这意味着我的快照包含了Date我传递给组件的s DateInput以及它们自己解析的文本表示形式。在测试中,我使用创建了一些固定的日期new Date(1995, 4, 23)。
DateRange
5/20/2016 - 7/18/2016
DateInput
Date
new Date(1995, 4, 23)
当我在不同的时区中运行测试时,这会生成不同的快照 ,因为Date(year, month, ...)构造函数会在本地时区中创建日期。例如,使用new Date()会在本地时区和CI服务器上的快照之间产生快照差异。
Date(year, month, ...)
new Date()
- value={1995-05-22T22:00:00.000Z} + value={1995-05-23T00:00:00.000Z}
我尝试从日期中删除时区偏移量,但是快照的显示字段值有所不同,其中使用了本地时区相关表示。
- value={5/20/2016 - 7/18/2016} + value={5/19/2016 - 7/17/2016}
Date 无论测试在哪个时区运行,如何使测试在快照中产生相同的?
我为此付出了数小时/几天的努力,只有这样对我有用:
1)在您的测试中:
Date.now = jest.fn(() => new Date(Date.UTC(2017, 7, 9, 8)).valueOf())
2)然后TZ在运行测试之前更改env var。所以我package.json中的脚本是:
TZ
( 仅限Mac和Linux )
"test": "TZ=America/New_York react-scripts test --env=jsdom",
( Windows )
"test": "set TZ=America/New_York && react-scripts test --env=jsdom",