在Jest中进行每次测试之前运行全局测试设置

rto*_*res 5 unit-testing jestjs

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

我查看了jest的配置文件,发现有两个配置可能起作用:globalSetup和setupFiles,但是它们似乎只能运行一次(在测试运行的开始)。就像我说的那样,我需要it在测试文件中的“每个” 块之前运行它。

这可能吗?

zzz*_*zzz 7

您可以使用setupTestFrameworkScriptFile它将在每次测试之前运行

// package.json
{
  // ...
  "jest": {
    "setupTestFrameworkScriptFile": "<rootDir>/setupTests.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

在中setupTests.js,您可以直接编写:

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

global.afterEach(() => {
   ...
});
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用... global.beforeEach 不是一个函数。 (3认同)
  • 注意:此方法有效,但正如@Alvin Lee所指出的那样:“不建议使用setupupTestFrameworkScriptFile,而建议使用setupFilesAfterEnv” (2认同)

Dav*_*nda 7

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

// jest.config.js

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

Run Code Online (Sandbox Code Playgroud)
// tests/setupTests.ts

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

afterEach(() => {
  console.log('after each')
})
Run Code Online (Sandbox Code Playgroud)

试试看!


Alv*_*Lee 6

就像@zzz的答案的后续一样,有关配置Jest的最新文档也指出:

注意:setupTestFrameworkScriptFile不推荐使用setupFilesAfterEnv。

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

// package.json
{
  // ...
  "jest": {
    "setupFilesAfterEnv": [
      "<rootDir>/setupTests.js"
    ]
  } 
}
Run Code Online (Sandbox Code Playgroud)