async/await函数中的Expect.assertions是什么?

4

根据 Jest 文档:

Expect.assertions(number) 验证在测试期间调用了一定数量的断言。这通常在测试异步代码时非常有用,以确保回调函数中的断言实际上被调用。

这意味着,如果我们测试 promises 的拒绝情况(即在 catch 中的断言),没有使用 expect.assertionspromise 可能会被解析并且我们的测试将会通过。然而,在测试函数内部我们根本没有错误,也没有运行我们的断言。换句话说,我们没有检查我们想要的内容。我们得到了答案,但不是我们想要的问题的答案,因为 已完成的 promise 不会使测试失败。总之,在检查拒绝/错误时定义断言数量是必须的。

文档中还有另一个例子:

test('the data is peanut butter', async () => {
  expect.assertions(1);
  const data = await fetchData();
  expect(data).toBe('peanut butter');
});

由于我们使用了async/await模式,因此我们将等待promise被解析,然后我们的测试条件肯定会运行。

expect.assertions在这里的目的是什么?我们真的需要在这段代码中使用expect.assertions吗,还是只是一种最佳实践?

1个回答

7

您说得一点没错。

在测试时,如果使用catch捕获被拒绝的Promise,那么使用expect.assertions是必要的。

当测试已解决的Promise或使用.rejects测试被拒绝的Promise时,不需要使用expect.assertions

对于像这样的简单测试,expect.assertions并不是特别有用。但对于更复杂的异步测试,有时将expect.assertions作为额外的保障加入可以确保测试行为符合预期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接