gpt4 book ai didi

jestjs - 如果您正在等待任何异步函数调用,是否需要使用 expect.assertions()?

转载 作者:行者123 更新时间:2023-12-04 13:03:55 27 4
gpt4 key购买 nike

在重构我们的 Jest 测试套件时,我发现了很多这样的事情:

it('calls the API and throws an error', async () => {
expect.assertions(2);
try {
await login('email', 'password');
} catch (error) {
expect(error.name).toEqual('Unauthorized');
expect(error.status).toEqual(401);
}
});

相信 expect.assertions(2)行在这里是多余的,可以安全地删除,因为我们已经 awaitlogin() 的异步调用.

我是正确的,还是我误解了 expect.assertions作品?

最佳答案

expect.assertions在测试异步代码的错误场景时很重要,不是多余的。

如果删除 expect.assertions从您的示例中,您不能确信 login实际上确实抛出了错误。

it('calls the API and throws an error', async () => {
try {
await login('email', 'password');
} catch (error) {
expect(error.name).toEqual('Unauthorized');
expect(error.status).toEqual(401);
}
});

假设有人改变了 login 的行为根据其他逻辑抛出错误,或者有人影响了此测试的模拟,这不再导致 login扔。 catch 中的断言块不会运行,但测试仍会通过。

使用 expect.assertions在测试开始时确保如果 catch 中的断言没有运行,我们就会失败。

关于jestjs - 如果您正在等待任何异步函数调用,是否需要使用 expect.assertions()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50816254/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com