У меня в 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);
});