@vadimek
Полуджун

Как тестировать обертку над axios при помощи Jest?

Не могу понять, как тестировать и мокать Jest'ом свой клиент к API сервера.

У меня есть файл createApiClient.js:
import axios from 'axios';

function createApiClient(config = {}) {
  const client = axios.create(config);
  client.interceptors.response.use((response) => response.data,
    (error) => {
      if (error.response) {
        throw error.response.data;
      } else {
        throw new Error('Ошибка во время соединения с сервером! Попробуйте повторить попытку позже.');
      }
    });
  return client;
}
export default createApiClient;


Затем есть файл, уже использующий эту функцию для создания конкретного клиента client.js:
import createApiClient from '../createApiClient';

const request = createApiClient({
  baseURL: process.env.VUE_APP_AUTH_API_URL,
});
async function logIn(username, password) {
  const { token } = await request.post('login/', {
    username,
    password,
  });
  return token;
}
    // other functions...
export { logIn, register, getUserInfo };


Как протестировать logIn() и другие функции в клиенте, не могу понять, как и что правильно мокать, особенно интересует момент с axios.create() и interceptors?
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
@vadimek Автор вопроса
Полуджун
Решил проблему:
import { logIn } from '@/api/auth/client';
import createApiClientMock from '@/api/createApiClient';

jest.mock('@/api/createApiClient', () => {
  const axiosInstance = {
    post: jest.fn(),
    get: jest.fn(),
  };
  return jest.fn(() => axiosInstance);
});
const mRequest = createApiClientMock();

describe('Проверка клиента API аутентификации', () => {
  it('login success', async () => {
    const mResponse = { token: 'token' };
    mRequest.post.mockResolvedValueOnce(mResponse);
    const actual = await logIn('foo', 'qwerty');
    expect(actual).toEqual('token');
    expect(mRequest.post).toHaveBeenNthCalledWith(1, 'login/', { username: 'foo', password: 'qwerty' });
  });
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BBoyJuss
@BBoyJuss
WordPress, интерфейсы и все вытекающие
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы