在所有测试完成后开玩笑清理 运行

Jest clean up after all tests have run

在 Jest 中是否可以 运行 在所有其他测试完成后 运行 清理或拆卸任务?类似于 setupFiles 如何允许在任何测试之前设置任务 运行。如果这也可以加分 运行 不管测试是否有任何错误。

afterAll(() => {}) 放在文件的顶层(在任何 describe 函数之外)只会在该特定文件的测试完成后 运行 出现。

用例是我有许多测试文件将在开发数据库中创建用户,我不想让每个测试文件负责之后清理和删除用户。编写测试时也可能发生错误,因此如果不管错误如何进行清理,那将是更可取的。

setupFiles 有一个兄弟挂钩,它会在每个测试套件之前触发,但会在您的测试运行器(默认情况下为 Jasmine2)初始化全局环境之后立即触发。

叫做setupFilesAfterEnv。像这样使用它:

{
    "setupFilesAfterEnv": ["<rootDir>/setup.js"]
}

示例setup.js:

beforeAll(() => console.log('beforeAll'));
afterAll(() => console.log('afterAll'));

setup.js 不需要导出任何东西。它将在每个测试套件(每个测试文件)之前执行。因为测试运行器已经初始化,像 beforeAllafterAll 这样的全局函数就像在你的常规测试文件中一样在范围内,所以你可以随意调用它们。

似乎有一个名为 reporter 的功能正是这样做的:

jest.config.js中:

module.exports = {
    // ...
    setupFilesAfterEnv: [
        "./test/setup.js",
        // can have more setup files here
    ],
}

./test/setup.js中:

afterAll(() => { // or: afterAll(async () => { }); to support await calls
    // Cleanup logic
});

注:

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

在package.json中:

{
  "jest": {
    "globalTeardown": "<rootDir>/teardownJest.js"
  },
} 

teardownJest.js:

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

module.exports = teardown;

请记住,jest 会为每个测试套件和拆解文件从头开始导入每个模块。来自 official documentation:

By default, each test file gets its own independent module registry

因此,您不能为每个测试套件或拆解文件共享相同的数据库模块实例。因此,如果你想在所有测试服之后关闭数据库连接,这个方法是行不通的