所有测试运行后,Jest清理干净

dco*_*ran 12 unit-testing node.js jasmine reactjs jestjs

在Jest中是否可以运行在所有其他测试完成后运行的清理或拆卸任务?类似于setupFiles允许在任何测试运行之前设置任务的方式.无论测试是否有任何错误,如果这也可以运行,则可以获得奖励积分.

放置afterAll(() => {})在文件的顶层(在任何描述函数之外)仅在该特定文件的测试完成后运行.

用例是我有很多测试文件可以在开发数据库中创建用户,我不想让每个测试文件负责清理和删除用户.编写测试时也会发生错误,因此如果发生清理而不考虑哪种错误更可取.

Mic*_*ała 15

setupFiles在每个测试套件之前都有一个兄弟钩子,但是在你的测试运行器(默认情况下是Jasmine2)初始化全局环境之后.

它被调用setupFilesAfterEnv,它需要一个字符串作为参数,而不是像中的数组setup.js.

像这样使用它:

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

示例setup.js:

beforeAll(() => console.log('beforeAll'));
afterAll(() => console.log('afterAll'));
Run Code Online (Sandbox Code Playgroud)

beforeAll不需要出口任何东西.它将在每个测试套件(每个测试文件)之前执行.因为测试运行器已经初始化,所以全局函数就像在常规测试文件中一样afterAll,setupFiles并且在范围内,因此您可以根据需要调用它们.

setupTestFrameworkScriptFile在beforeAll和afterAll之前触发

  • 我需要 globalTeardown (和 globalSetup),因为我需要在每次测试运行时启动和停止并行服务一次,而不是在每个测试套件之前或之后。 (4认同)
  • 甜蜜,这看起来像我需要的!谢谢. (2认同)

Non*_*ame 14

要在所有测试套件完成后执行一些任务,请使用globalTeardown。例子:

在 package.json 中:

{
  "jest": {
    "globalTeardown": "<rootDir>/teardownJest.js"
  },
} 
Run Code Online (Sandbox Code Playgroud)

teardownJest.js中:

const teardown = async () => {
  console.log('called after all test suites');
}

module.exports = teardown;
Run Code Online (Sandbox Code Playgroud)

请记住,jest 从头开始​​为每个测试套件和拆卸文件导入每个模块。来自官方文档:

默认情况下,每个测试文件都有自己独立的模块注册表

因此,您不能为每个测试套件或拆卸文件共享相同的数据库模块实例。因此,如果您想在所有测试套件之后关闭数据库连接,此方法将不起作用


Tho*_*Tho 9

jest.config.js

module.exports = {
    // ...
    setupFilesAfterEnv: [
        "./test/setup.js",
        // can have more setup files here
    ],
}
Run Code Online (Sandbox Code Playgroud)

./test/setup.js

afterAll(() => { // or: afterAll(async () => { }); to support await calls
    // Cleanup logic
});
Run Code Online (Sandbox Code Playgroud)

笔记: