在异步函数中使用完参数时测试不会失败

时间:2019-01-22 07:18:52

标签: javascript asynchronous jestjs

即使未通过测试,测试用例也会自动超时

  const getAsync = async () => 1

  test("expect inside async", async (done) => {
    const a = await getAsync()
   // expect(a).toEqual(1) this will pass
    expect(a).toEqual(2)
    done()
  })

预期:测试失败,不等于

但是, 结果

    Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.

更新

我想我的问题在于“完成”的论点。

当我使用done参数时,测试不会失败 但是当我删除它时,测试将失败。

但是我仍然不知道使用“在异步等待中完成吗?

2 个答案:

答案 0 :(得分:0)

Jest documentation进行操作,这就是异步处理,等待处理的方法。异步等待将始终期望返回值。

test('expect inside async', async () => {
  expect.assertions(1);
  const a = await getAsync();
  expect(a).toEqual(2);
});

或者,如文档中所述,

test('expect inside async', async () => {
  expect.assertions(1);
  await expect(getAsync()).resolves.toEqual(2);
});

答案 1 :(得分:0)

另请参阅:https://github.com/facebook/jest/issues/3519

如果您使用纯异步等待未完成,请参阅@Acanthika的答案

如果您使用done:

  test.only("should not pass", async (done) => {
    try {
      const a = await getAsync()
      expect(a).toEqual(2)
      done()
    } catch (e) {
      // have to manually handle the failed test with "done.fail"
      done.fail(e)
    }
  })