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-mock2. Импортируйте и настройте 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);
});