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);
});