2016-12-24 45 views
9

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

afterAll(() => {})置于文件的顶层(在任何描述函数之外)时,只会在完成特定文件的测试后才会运行。

用例是我有很多测试文件将在开发数据库中创建用户,我不希望每个测试文件都负责清理和删除用户。编写测试时也可能发生错误,所以如果清理发生而不管错误是否会更好。

+0

我想每个测试必须对环境完全控制,所以每个测试必须负责其环境。也许你需要的是拥有多个环境,例如一个可以在内存中运行(模拟实现数据库),另一个可以在数据库中运行。 –

+0

你可以在你的测试运行器中添加一个清理命令吗?即如果你正在使用gulp,make,grunt等:'run_your_tests.js; clean_up_database;' – dm03514

回答

5

有一个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

+2

甜美,这看起来像我需要的!谢谢。 – dcochran

相关问题