测试用例失败后进行笑话清理

时间:2019-02-12 11:24:00

标签: javascript typescript testing jestjs

在测试用例失败之后,什么是一种好的清洁方法? 对于很多测试用例,我首先创建一个干净的数据库环境,在测试用例完成后需要对其进行清理。

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();
});

2 个答案:

答案 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答案必须有用。