来自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
还是写它只是一种最佳实践?
答案 0 :(得分:3)
您完全正确。
使用expect.assertions
测试拒绝的承诺时,必须使用catch
。
在测试已解决的承诺或使用.rejects
测试被拒绝的承诺时,不必使用expect.assertions
。
对于像这样的简单测试expect.assertions
并不是特别有用。对于更复杂的异步测试,有时添加expect.assertions
作为额外的保护措施以确保测试的行为符合预期可能是有用的。