Модульный тест перехватчика логики в Axios - PullRequest
0 голосов
/ 03 января 2019

У меня в 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...