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

时间:2016-12-24 18:57:45

标签: node.js unit-testing reactjs jasmine jestjs

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

afterAll(() => {})置于文件的顶层(在任何describe函数之外)只会在该特定文件的测试结束后运行。

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

3 个答案:

答案 0 :(得分:12)

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

它被称为setupTestFrameworkScriptFile,它将一个字符串作为参数,而不是setupFiles中的数组。

像这样使用:

{
    "setupTestFrameworkScriptFile": "<rootDir>/setup.js"
}

示例 setup.js

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

setup.js无需导出任何内容。它将在每个测试套件(每个测试文件)之前执行。由于测试运行器已经初始化,因此像beforeAllafterAll这样的全局函数就像在常规测试文件中一样,因此您可以根据需要调用它们。

setupTestFrameworkScriptFile firing beforeAll and afterAll

答案 1 :(得分:1)

似乎有一个名为reporter的功能可以完全做到这一点:

答案 2 :(得分:0)

要在所有测试套件完成后执行一些任务,请使用 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:

<块引用>

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

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