我正在使用 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();
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
此变体也不起作用:
expect(() => api(`verify/${profile.auth.verifyToken}`, {method: 'POST'})).toThrow();
Run Code Online (Sandbox Code Playgroud)
顺便说一句,当 HTTPError 被抛出但未被捕获时,没有堆栈跟踪,我看不到错误在哪里抛出。如果还有其他错误,我会确切地看到哪个测试线是负责的。为什么?
以下示例适用于 GET 请求,但不适用于 POST 请求。我怎样才能使它适用于 POST?
https://www.npmjs.com/package/got#retry
const got = require('got')
const retry = {
retry: {
retries: 3
}
}
got('http://localhost:3000/retry', retry).then(({ body }) => {
console.log(body);
}).catch((err) => {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)