小编典典

如何在Jest配置中设置时区?

reactjs

✗ npx jest --version
24.5.0

获得了一组对时区敏感的玩笑测试。我们通常使用npm脚本运行它们:"jest": "TZ=utc jest"

将TZ设置为utc时,我可以在快照中获得如下所示的值:

modificationDate="2019-01-08T00:00:00.000Z"

没有它,我得到:

modificationDate="2019-01-08T08:00:00.000Z"

有没有一种方法可以在我的jest配置中进行设置,这样我就可以npx jest在命令行中运行而不必通过NPM脚本了?配置文档中没有关于此的任何内容。

我尝试将这两个添加到我的jest.config.js中。没有人起作用:

  TZ: 'utc',

  globals: {
    TZ: 'utc',
  },

当然,解决这个问题似乎微不足道,但是令我惊讶的是,Jest没有办法配置它进行测试。


阅读 482

收藏
2020-07-22

共1个答案

小编典典

这在Windows上不起作用 -请参阅
https://github.com/nodejs/node/issues/4230


问题process.env.TZ = 'UTC';在于,如果某行在此行之前运行并使用Date,则该值将被缓存在中Date。因此process.env通常不适合设置时区。参见
https://github.com/nodejs/node/issues/3449

因此,更好的方法是使用实​​际的env变量,但是对于测试而言,它将起作用:

1.将此添加到您的package.json

  "jest": {
     ...
     // depending on your paths it can also be './global-setup.js' 
    "globalSetup": "../global-setup.js"
  }
}

2.将此文件放在package.json之外, 作为global-setup.js

module.exports = async () => {
    process.env.TZ = 'UTC';
};

3.可选:添加测试以确保UTC执行

describe('Timezones', () => {
    it('should always be UTC', () => {
        expect(new Date().getTimezoneOffset()).toBe(0);
    });
});

正常setupFiles不能正常工作 对我来说,因为它们运行太晚了(开玩笑:^ 23.5.0)。因此, 必须
使用globalSetup文件。

2020-07-22