React·100 питань

Як мокати fetch/HTTP запити в тестах?

Відповідь

Тестування мережевих запитів — це найважливіша частина розробки інтерфейсів на React, оскільки більшість додатків залежать від зовнішніх даних. Правильний підхід до мокання HTTP-запитів гарантує, що ваші тести будуть стабільними, швидкими та незалежними від доступності бекенд-серверів.

Найбільш сучасним та надійним інструментом для мокання запитів у сучасних вебдодатках є бібліотека Mock Service Worker, скорочено MSW. Головна перевага MSW полягає в тому, що він перехоплює мережеві запити на рівні Service Worker або перехоплювача Node.js, не вимагаючи зміни самого коду компонентів або бібліотек для запитів. Завдяки цьому тести виходять максимально реалістичними, адже компонент відправляє стандартний fetch або axios-запит, навіть не підозрюючи, що відповідь підготовлена заздалегідь.

Проте в деяких простих юніт-тестах припустимо мокати сам HTTP-клієнт, наприклад, бібліотеку Axios на рівні модулів Jest, якщо вам потрібно швидко перевірити поведінку компонента за певної відповіді. Незалежно від обраного інструменту, необхідно суворо дотримуватися дисципліни очищення стану між тестами, щоб дані з одного сценарію випадково не вплинули на інший.

Для забезпечення якісного тестування мережевої взаємодії рекомендується наступний порядок дій:

Налаштуйте MSW для переhоплення мережевих запитів як у середовищі браузера, так і в Node.js для тестів.
Створіть набір стандартних моків для успішних відповідей та сценаріїв з помилками сервера.
Усередині тестів обов'язково перевіряйте проміжні стани інтерфейсу, такі як індикатор завантаження та повідомлення про помилки.
Очищайте історію запитів і скидайте обробники після кожного окремого тесту за допомогою методів resetHandlers.
Переконайтеся, що ваші тести коректно відпрацьовують затримки мережі та не падають при таймаутах.
Чи корисна ця відповідь?

Інші питання цієї теми

Пов’язані питання з інших тем