假设我具有以下功能,我想以不同的方式处理不同的axios错误响应。
async fetchData() {
const data = {...};
const response = await axios.post('endpoint_here', data)
.catch((error) => {
if (error.code === SomeKindOfError) {
throw new SomeKindOfError(error.message);
}
if (error.code === AnotherKindOfError) {
throw new AnotherKindOfError(error.message);
}
throw new Error(error.message);
});
return response.data;
}
如何在使用Jest的测试中测试所有这些不同的案例?
目前,我的测试是这样的:
test('test SomeKindOfError', async () => {
axios.post.mockRejectedValueOnce(new SomeKindOfError('There was an error.'));
await expect(fetchData())
.rejects
.toThrowError(new SomeKindOfError('There was an error.'));
});
以上测试是通过的,但与该功能的正确测试相去甚远。
我希望能够检查从Axios返回的错误是什么,并相应地测试是否抛出了我自己的自定义错误。
理想情况下,一种模拟Axios错误响应的方法将使我能够涵盖测试中的所有不同情况,如下所示:
test('test SomeKindOfError', async () => {
axios.post.mockImplementation(() => Promise.reject({
error: { code: SomeKindOfError.code },
}));
await expect(fetchData())
.rejects
.toThrowError(new SomeKindOfError('There was an error.'));
});
答案 0 :(得分:0)
最终,解决方案是如此简单:
test('test SomeKindOfError', async () => {
axios.post.mockRejectedValueOnce({ code: SomeKindOfError });
await expect(fetchData())
.rejects
.toThrowError(new SomeKindOfError('There was an error.'));
});