Jest позволяет тестировать HTTP-запросы через имитацию (mocking). Вы можете использовать библиотеки, такие как axios или fetch-mock, для этой цели. Вот как это можно сделать:

Использование axios для имитации HTTP-запросов

1. Создайте папку __mocks__:

Создайте папку __mocks__ на том же уровне, что и node_modules, и поместите в неё файл axios.js.

2. Создайте имитацию axios:

В файле axios.js экспортируйте объект по умолчанию с методами get и post, которые возвращают промисы.

Пример __mocks__/axios.js:

export default {
  get: jest.fn(() => Promise.resolve({ data: {} })),
  post: jest.fn(() => Promise.resolve({ data: {} })),
};

3. Импортируйте и имитируйте axios в тестовом файле:

В вашем тестовом файле импортируйте axios и используйте jest.mock('axios') для имитации. Затем определите, что должен возвращать промис, используя axios.get.mockResolvedValue({ data: {} }).

import axios from 'axios';
import { fetchData } from './api';
 
jest.mock('axios');
 
test('should fetch data', async () => {
  const data = { id: 1, name: 'John Doe' };
  axios.get.mockResolvedValue({ data });
 
  const result = await fetchData();
 
  expect(result).toEqual(data);
  expect(axios.get).toHaveBeenCalledWith('https://api.example.com/data');
});

Использование fetch-mock для имитации HTTP-запросов

1. Установите fetch-mock:

npm install fetch-mock

2. Импортируйте и настройте fetch-mock:

В вашем тестовом файле импортируйте fetch-mock и настройте его для возврата ожидаемых данных.

import fetchMock from 'fetch-mock';
import { fetchData } from './api';
 
afterEach(() => {
  fetchMock.restore();
});
 
test('should fetch data', async () => {
  const data = { id: 1, name: 'John Doe' };
  fetchMock.get('https://api.example.com/data', { data });
 
  const result = await fetchData();
 
  expect(result).toEqual(data);
  expect(fetchMock.called('https://api.example.com/data')).toBe(true);
});

Назад