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