在Jest中是否可以运行在所有其他测试完成后运行的清理或拆卸任务?类似于setupFiles允许在任何测试运行之前设置任务的方式。无论测试是否有任何错误,如果这也可以运行,奖励积分。
将afterAll(() => {})
置于文件的顶层(在任何describe函数之外)只会在该特定文件的测试结束后运行。
用例是我有许多测试文件可以在开发数据库中创建用户,并且我不想让每个测试文件负责清理和删除用户。编写测试时也会发生错误,因此如果发生清理而不考虑可能更好的错误。
答案 0 :(得分:12)
setupFiles
有一个兄弟钩子,它会在每个测试套件之前触发,但是在你的测试运行器(默认情况下是Jasmine2)初始化全局环境之后。
它被称为setupTestFrameworkScriptFile
,它将一个字符串作为参数,而不是setupFiles
中的数组。
像这样使用:
{
"setupTestFrameworkScriptFile": "<rootDir>/setup.js"
}
示例 setup.js :
beforeAll(() => console.log('beforeAll'));
afterAll(() => console.log('afterAll'));
setup.js
无需导出任何内容。它将在每个测试套件(每个测试文件)之前执行。由于测试运行器已经初始化,因此像beforeAll
和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:
<块引用>默认情况下,每个测试文件都有自己独立的模块注册表
因此,您不能为每个测试套件或拆卸文件共享相同的数据库模块实例。因此,如果您想在所有测试结束后关闭数据库连接,此方法将不起作用