jest 全局变量示例

jest global variable example

有人可以举例说明如何使用 jest 全局变量吗?

{
  ...
  "jest": {
    "globals": {
      "__DEV__": true,
    }
  }
  ...
}

我是在 package.json 文件中指定全局变量,还是创建一个包含 js 文件的文件夹来定义全局变量?

谢谢

是的。您将全局变量放在 package.json 中。例如,这里是默认的 react-native jest 配置的摘录:

"jest": {
    "globals": {
       "__DEV__": true,
       "__RCTProfileIsProfiling": false
     },
     ...
},

这将使变量在测试 运行 时全局可用。

对我来说,使用 Jest 配置文件效果更好,因为它本身就是一个 Javascript 文件,因此它提供了充分的自由:

在您的文件夹中 运行 jest --init 之后,在 Jest 生成的 jest.config.js 文件中,向下滚动以找到:

// A set of global variables that need to be available in all test environments
// globals: {},

取消注释第二行并将所有全局变量放在那里。

一种更简洁的添加全局变量的方法是在 package.json 中设置 "setupFiles": "<rootDir>/private/jest/setup.js",然后创建一个设置 global.__DEV__ = true 的 setup.js 文件。

此模式有助于使第 3 方库也可作为 Jest 测试的全局变量(如 Backbone、jQuery、lodash 等)- 例如。 global.Backbone = require('backbone'); 等等。

(重新提交此作为答案,因为它以前只是 Michael Helvey 的答案下的评论。)

如果您正在使用 create-react-app,则必须使用 src/setupTests.js 文件,而不是通过 package.json 文件中的 setupFiles 指向文件。

https://create-react-app.dev/docs/running-tests/#srcsetuptestsjs

src/setupTests.js 文件中,您可以像这样定义全局变量:

global.TIMEOUT = 3000;

要共享对象变量(不仅是与配置的全局变量 属性 一样的原语),您可以使用 testEnvironment 属性.

这里有更多解释 Jest's Git