在所有测试完成后开玩笑清理 运行
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
不需要导出任何东西。它将在每个测试套件(每个测试文件)之前执行。因为测试运行器已经初始化,像 beforeAll
和 afterAll
这样的全局函数就像在你的常规测试文件中一样在范围内,所以你可以随意调用它们。
似乎有一个名为 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
});
注:
- 我正在使用 Jest 24.8
- 参考:
setupFilesAfterEnv
要在所有测试套件完成后执行某些任务,请使用 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
因此,您不能为每个测试套件或拆解文件共享相同的数据库模块实例。因此,如果你想在所有测试服之后关闭数据库连接,这个方法是行不通的
在 Jest 中是否可以 运行 在所有其他测试完成后 运行 清理或拆卸任务?类似于 setupFiles 如何允许在任何测试之前设置任务 运行。如果这也可以加分 运行 不管测试是否有任何错误。
将 afterAll(() => {})
放在文件的顶层(在任何 describe 函数之外)只会在该特定文件的测试完成后 运行 出现。
用例是我有许多测试文件将在开发数据库中创建用户,我不想让每个测试文件负责之后清理和删除用户。编写测试时也可能发生错误,因此如果不管错误如何进行清理,那将是更可取的。
setupFiles
有一个兄弟挂钩,它会在每个测试套件之前触发,但会在您的测试运行器(默认情况下为 Jasmine2)初始化全局环境之后立即触发。
叫做setupFilesAfterEnv
。像这样使用它:
{
"setupFilesAfterEnv": ["<rootDir>/setup.js"]
}
示例setup.js:
beforeAll(() => console.log('beforeAll'));
afterAll(() => console.log('afterAll'));
setup.js
不需要导出任何东西。它将在每个测试套件(每个测试文件)之前执行。因为测试运行器已经初始化,像 beforeAll
和 afterAll
这样的全局函数就像在你的常规测试文件中一样在范围内,所以你可以随意调用它们。
似乎有一个名为 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
});
注:
- 我正在使用 Jest 24.8
- 参考: setupFilesAfterEnv
要在所有测试套件完成后执行某些任务,请使用 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
因此,您不能为每个测试套件或拆解文件共享相同的数据库模块实例。因此,如果你想在所有测试服之后关闭数据库连接,这个方法是行不通的