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

ogo*_*tos 2 asynchronous assertion async-await jestjs

从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');
});
Run Code Online (Sandbox Code Playgroud)

在使用async/await模式时,我们将等待promise解决,并且测试条件一定会运行。

这里的目的是expect.assertions什么?我们是否真的需要expect.assertions此代码,或者只是编写它的最佳实践?

Bri*_*ams 5

你说的没错。

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

使用expect.assertions测试的解决承诺或拒绝使用承诺进行测试时,当是没有必要的.rejects

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