Jest全局变量示例

77

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

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

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

谢谢


源文:https://jestjs.io/docs/en/configuration#globals-object请返回仅翻译后的文本。 - Steve
5个回答

79

是的,你需要将全局变量放在 package.json 中。例如,这里是默认的 React Native Jest 配置的一部分:

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

当运行测试时,这将使变量在全局范围内可用。


3
如果需要,您也可以访问全局变量,例如 global.__DEV__ - sajinshrestha
21
在package.json中设置 "setupFiles": "<rootDir>/private/jest/setup.js",然后创建一个文件来设置global.__DEV__ = true,是一种更加干净的添加全局变量的方式。这种模式对于使第三方库在Jest测试中作为全局变量可用非常有帮助(例如Backbone、jQuery、lodash等) - 例如: global.Backbone = require('backbone'); - nickang
谢谢@nickang,你的评论更有用,为什么不把它作为答案添加呢。 - maximus ツ
1
我应该如何在这里添加窗口对象?尝试时会显示需要弹出其他选项,因此我需要在窗口对象中有一个全局变量,例如window.config.URL = 'http://www.example.com'。我应该如何将其添加到package.json内的jest中? - Learner

37
更清晰的添加全局变量的方法是在package.json中设置"setupFiles": "/private/jest/setup.js",然后创建一个setup.js文件来设置global.__DEV__ = true。这种模式有助于使第三方库(如Backbone、jQuery、lodash等)在Jest测试中作为全局变量可用-例如,global.Backbone = require('backbone')等。

4
global.__DEV__只是globals参数文档中的一个示例,它只能启用从jest.config.js设置可访问的全局变量值。setupFiles在每个测试文件之前运行,定义在其中的全局变量可以从测试文件中访问。globalSetup在所有测试文件之前运行;其中定义的全局变量无法从测试文件中访问,也不能从setupFiles中访问。 - taubhi
1
快速提醒:setupFiles需要被定义为一个数组。 - flaky

10

对于我来说,使用Jest配置文件效果更好,因为它本身就是一个JavaScript文件,所以可以完全自由地进行操作:

在您的文件夹中运行jest --init后,在Jest创建的jest.config.js文件中向下滚动以查找:

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

取消第二行的注释并将所有全局变量放在其中。


1
我该如何将函数放入全局变量中? - Victor Pudeyev

10

1
这对我有用 :) 经过几次搜索,谢谢 Steve :) - Learner

1
为了分享对象变量(不仅是像配置中的全局属性那样的原始类型),您可以使用testEnvironment属性。
Jest的Git中有更多解释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接