在 Jest 中的每个测试之前运行全局测试设置

Posted

技术标签:

【中文标题】在 Jest 中的每个测试之前运行全局测试设置【英文标题】:Running a global test setup before each test in Jest 【发布时间】:2018-07-21 05:35:51 【问题描述】:

我正在尝试在我的 Jest 测试套件中的每个测试之前执行测试设置功能。我知道我可以使用 beforeEach 在单个测试文件中完成此操作,但我想对我的所有测试文件全局执行此操作而无需显式修改每个单个文件。

我查看了jest configuration file,并注意到一些认为可能有效的配置:globalSetupsetupFiles,但它们似乎只运行一次(在测试运行的最开始时)。就像我说的,我需要在测试文件中的“每个”it 块之前运行它。

这可能吗?

【问题讨论】:

我知道这根本没有帮助,但我认为在 Jest 中没有办法做到这一点。 【参考方案1】:

您可以使用 setupFilesAfterEnv(替换 setupTestFrameworkScriptFile,从 jest 版本 24.x 中弃用),它将在每次测试之前运行

// package.json

  // ...
  "jest": 
    "setupFilesAfterEnv": ["<rootDir>/setupTests.js"]
  

而在setupTests.js,可以直接写:

global.beforeEach(() => 
  ...
);

global.afterEach(() => 
   ...
);

【讨论】:

注意:这行得通,但正如@Alvin Lee 在下面指出的那样:“setupTestFrameworkScriptFile 已被弃用,取而代之的是 setupFilesAfterEnv” 对我不起作用... global.beforeEach 不是函数。 @geoidesic 使用 setupFilesAfterEnv 而不是 setupTests (顾名思义,届时将设置包括 beforeEach 在内的测试环境) 这不再起作用了。您必须将setupFilesAfterEnv 添加到jest.config.js【参考方案2】:

正如@zzz 的答案的后续,最近的documentation on Configuring Jest 注释:

注意:setupTestFrameworkScriptFilesetupFilesAfterEnv 取代。

所以现在,您的文件应该如下所示:

// package.json

  // ...
  "jest": 
    "setupFilesAfterEnv": [
      "<rootDir>/setupTests.js"
    ]
   

【讨论】:

【参考方案3】:

setupFilesAfterEnv 配置是可行的方法,是的,您可以在该文件中使用beforeEach,它将在所有套装的每个测试中运行。

// jest.config.js

module.exports = 
  setupFilesAfterEnv: ['<rootDir>/tests/setupTests.ts']


// tests/setupTests.ts

beforeEach(() => 
  console.log('before each')
)

afterEach(() => 
  console.log('after each')
)

试试看!

【讨论】:

以上是关于在 Jest 中的每个测试之前运行全局测试设置的主要内容,如果未能解决你的问题,请参考以下文章

成组运行 Jest 测试套件

在 Jest 测试之前无法加载 Google Maps API

使用 Jest 测试时未定义全局节点配置变量

如何使用 vscode 设置 jest typescript 测试以在调试模式下运行

Nuxt.js 中的 Jest 全局插件

在 py.test 中的每个测试之前和之后运行代码?