根据 Jest 文档:
Expect.assertions(number)
验证在测试期间调用了一定数量的断言。这通常在测试异步代码时非常有用,以确保回调函数中的断言实际上被调用。
这意味着,如果我们测试 promises
的拒绝情况(即在 catch
中的断言),没有使用 expect.assertions
,promise
可能会被解析并且我们的测试将会通过。然而,在测试函数内部我们根本没有错误,也没有运行我们的断言。换句话说,我们没有检查我们想要的内容。我们得到了答案,但不是我们想要的问题的答案,因为 已完成的 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
吗,还是只是一种最佳实践?