在测试用例失败之后,什么是一种好的清洁方法? 对于很多测试用例,我首先创建一个干净的数据库环境,在测试用例完成后需要对其进行清理。
test('some test', async () => {
const { sheetService, cleanup } = await makeUniqueTestSheetService();
// do tests with expect()
await cleanup();
});
问题是:如果expects
中的一个失败,则不会调用cleanup()
,因此不会清理数据库环境,并且会因为连接未关闭而开玩笑地抱怨Jest did not exit one second after the test run has completed.
。 / p>
我当前的解决方法看起来像这样,但是将清理钩子推到比afterAll
事件中处理的数组上感觉并不干净。
const cleanUpHooks: (() => Promise<void>)[] = [];
afterAll(async () => {
await Promise.all(cleanUpHooks.map(hook => hook()));
});
test('some test', async () => {
const { sheetService, cleanup } = await makeUniqueTestSheetService();
// do tests with expect()
await cleanup();
});
答案 0 :(得分:0)
如果使用afterEach()怎么办?它将在每次测试后执行
test('some test', async () => {
const { sheetService, cleanup } = await makeUniqueTestSheetService();
// do tests with expect()
});
afterEach(async()=>{
await cleanup();
});
答案 1 :(得分:0)
在这种情况下使用try / finally块。
例如:
it("some test case", async done => {
try {
expect(false).toEqual(true);
console.log("abc");
done();
}finally{
console.log("finally");
// cleanup code below...
}
});
上面的代码将只执行finally块(因此,“ finally”将在控制台而不是“ abc”中显示。
请注意,catch块会超时,因此只需使用finally
。
Collapsing toolbar答案必须有用。