异步/等待功能中的Expect.assertions

时间:2019-02-15 09:41:38

标签: asynchronous async-await jestjs assertion

来自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还是写它只是一种最佳实践?

1 个答案:

答案 0 :(得分:3)

您完全正确。

使用expect.assertions 测试拒绝的承诺时,必须使用catch

在测试已解决的承诺或使用.rejects测试被拒绝的承诺时,不必使用expect.assertions

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