小编典典

使用Date对象的组件在不同的时区中生成不同的快照

reactjs

我正在将Enzyme酶转json一起使用来对React组件进行Jest快照测试。我正在测试一个DateRange组件的浅表快照,该组件使用当前范围(例如5/20/2016 - 7/18/2016)渲染一个显示字段,并DateInput允许两个组件选择一个Date值。这意味着我的快照包含了Date我传递给组件的s
DateInput以及它们自己解析的文本表示形式。在测试中,我使用创建了一些固定的日期new Date(1995, 4, 23)

当我在不同的时区中运行测试时,这会生成不同的快照 ,因为Date(year, month, ...)构造函数会在本地时区中创建日期。例如,使用new Date()会在本地时区和CI服务器上的快照之间产生快照差异。

- 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 无论测试在哪个时区运行,如何使测试在快照中产生相同的?


阅读 289

收藏
2020-07-22

共1个答案

小编典典

我为此付出了数小时/几天的努力,只有这样对我有用:

1)在您的测试中:

Date.now = jest.fn(() => new Date(Date.UTC(2017, 7, 9, 8)).valueOf())

2)然后TZ在运行测试之前更改env var。所以我package.json中的脚本是:

  • 仅限Mac和Linux

    "test": "TZ=America/New_York react-scripts test --env=jsdom",
    
  • Windows

    "test": "set TZ=America/New_York && react-scripts test --env=jsdom",
    
2020-07-22