【发布时间】:2019-05-30 04:04:12
【问题描述】:
我在 Axios 中设置了一个拦截器,如果初始 HTTP 响应是 401,它将刷新令牌,然后重试调用。
我正在尝试通过模拟 Axios 请求以返回 401,然后返回有效响应(请参阅下面的简化版本)并断言它被调用两次来对该逻辑进行单元测试。
我的问题是因为我在模拟请求,所以拦截器似乎没有运行。我没有重试请求,而是返回了stubAuthError。
有什么方法可以实现我所追求的,或者有更好的方法来测试它吗?
index.js
const axios = require('axios');
axios.interceptors.response.use(
response => response,
error => {
const status = error.response ? error.response.status : null;
if (status === 401) {
return makeRequest();
} else {
return Promise.reject(error);
}
}
);
async function makeRequest() {
return axios.request('url');
}
module.exports = {
makeRequest
};
index.spec.js
const axios = require('axios');
const { makeRequest } = require('./index');
const stubAuthError = { response: { status: 401 } };
const stubResponse = { data: { foo: 'bar' } };
it('should make the request twice', async () => {
expect.assertions(1);
axios.request = jest.fn();
axios.request
.mockRejectedValueOnce(stubAuthError)
.mockResolvedValueOnce(stubResponse);
try {
await makeRequest();
} catch (error) {}
expect(axios.request).toHaveBeenCalledTimes(2);
});
【问题讨论】:
标签: javascript axios jestjs