✗ npx jest --version
24.5.0

有一套对时区敏感的jest测试.我们通常使用npm脚本运行它们:"jest": "TZ=utc jest"

TZ设置为utc时,我在快照中得到如下值:

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

没有它,我会:

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

Is there a way to set that in my jest config so I can run 101 at the command line without having to go through the NPM script?这件事毫无意义.

我试着把这两个加入我的jest中.配置.js.两人都没有成功:

  TZ: 'utc',

  globals: {
    TZ: 'utc',
  },

当然,解决这个问题似乎很简单,但我很惊讶Jest没有办法为测试配置它.

推荐答案

101 - see 100


process.env.TZ = 'UTC';的问题是,如果某个东西在这一行之前运行并使用Date,那么该值将被缓存在Date中.因此,process.env通常不适合设置时区.见https://github.com/nodejs/node/issues/3449

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

1. Add this to your package.json

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

2. Put this file besides package.json等于global-setup.js

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

3. Optional: Add a test that ensures UTC execution

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

正常的setupFiles对我来说是not work,因为他们跑得太晚了(Jest :^23.5.0).因此,使用globalSetup文件是mandatory.

Reactjs相关问答推荐

运行 node server.js会导致以下错误:Route.post()需要回调函数,但在Route.&处得到了[对象Undefined] lt;计算>

将cy.get()与动态类名一起使用?

梅X折线图无响应

如何在NextJS中仅在刷新页面和页面淡出页面过渡时添加全屏加载器

如何解决Reaction中遗留的上下文API错误?

如何获取用户在 GooglePlacesAutocomplete 中输入的文本?

Next.js `getLayout` 函数没有被调用

验证 Yup 中的对象项

Chakra UI:如何在选中状态下设置复选框 colored颜色

ReactJS 中的图像加载顺序

React Router v6 路径中的符号

如何读取 null 的属性?

使用带有搜索字符串的全局过滤器时如何在 React-Table 中进行精确匹配?

添加 React/Redux 组件模板的 VS Code 扩展

使用 React.UseEffect 从 api 获取但我的清理返回不起作用

Cypress - 替换 React 项目中的变量

调用 Jest 和服务方法的问题

使用 useRef(uuid()) 的目的是什么?

react 路由dom没有路由匹配位置错误/在路由中制作组件

在 Redux 中更新布尔状态时出错