在我的项目中,我有一个命名空间,它导出了一些使用Axios的函数,在同一个文件中,我向Axios示例添加了一个拦截器,如下所示:
axios.interceptors.response.use(
(res) => res,
(error) => {
if (
error.response &&
(error.response.status?.toString() === "400" ||
error.response.status?.toString() === "403" ||
error.response.status?.toString() === "404")
) {
return Promise.reject(
Error(JSON.stringify(error.response.data?.status?.errors[0]))
);
} else if (error.response) {
return Promise.reject(
Error(
`server responsed with the following code: ${error.response?.status} and the following message: ${error.response?.statusText}`
)
);
} else if (error.request) {
return Promise.reject(
Error(
"The request was made but no response was received, check your network connection"
)
);
} else Promise.reject(error);
}
);
我想测试一下这个拦截器是否能按预期工作,我在这里搜索了很多表格并在谷歌上搜索了很多,但所有的答案基本上都是嘲笑拦截器而不是测试它。
我试过:
1.模拟axios post请求的响应,并检查返回的AxiosPromise,但它只包含我模拟的结果。当我使用mockResolvedValue
进行模拟时,它似乎忽略了拦截器。
1.我试过在模拟的axios示例中添加一个拦截器,但也没有成功。
谢谢
4条答案
按热度按时间jk9hmnmh1#
把函数取出并在没有axios的情况下测试它怎么样?
现在,您可以测试onFullfilled和onRejected函数,对axios的依赖性更少。
3duebb1j2#
您必须模拟拦截器并运行回调。
下面是一个关于如何做到这一点的例子:
httpService.ts
httpService.test.ts
balp4ylt3#
我也有同样的问题,我是这样解决的:
通过axiosResponse,您可以测试在拦截器中设置的所有逻辑
f2uvfpb94#
使用此模拟功能