我正在用JEST和Got测试一个端点。403 Forbidden错误下面的代码打印catch块中的错误,并失败,因为相同的调用没有引发错误。为什么?为什么?
try {
response = await api(`verify/${profile.auth.verifyToken}`, {method: 'POST'}).json();
} catch (e) {
console.log(e);
}
expect(async () => {
response = await api(`verify/${profile.auth.verifyToken}`, {method: 'POST'}).json();
}).toThrow();
输出量:
console.log test/api.int.test.js:112
HTTPError: Response code 403 (Forbidden)
at EventEmitter.<anonymous> (C:\dev\mezinamiridici\infrastructure\node_modules\got\dist\source\as-promise.js:118:31)
at processTicksAndRejections (internal/process/task_queues.js:97:5) {
name: 'HTTPError'
}
Error: expect(received).toThrow()
Received function did not throw
这个变种也不起作用:
expect(() => api(`verify/${profile.auth.verifyToken}`, {method: 'POST'})).toThrow();
顺便说一句,当HTTPError被抛出而没有被捕获时,没有堆栈跟踪,我看不到错误被抛出的位置。如果还有其他错误,我会准确地看到哪个测试线负责。为什么?为什么?
1条答案
按热度按时间s6fujrry1#
expect(...).toThrow()
用于检查函数调用是否抛出错误。当调用一个pwdc函数时,它永远不会抛出错误;相反,它返回一个Promise
,* 可能 * 最终会变成“rejected”。尽管promise函数使用相同的throw
/catch
术语,但检测抛出的错误所需的代码与检测拒绝的Promise所需的代码不同。这就是为什么Jest需要不同的Assert技术。试试
expect(...).rejects.toThrow()
:请注意,您必须
await
这个Assert,因为Jest需要等到Promise
完成后才能看到它是被解析还是被拒绝。