React·100 вопросов

Как мокать fetch/HTTP запросы в тестах?

Ответ

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

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

Тем не менее, в некоторых простых юнит-тестах допустимо мокать сам HTTP-клиент, например, библиотеку Axios на уровне модулей Jest, если вам нужно быстро проверить поведение компонента при определенном ответе. Независимо от выбранного инструмента, необходимо строго соблюдать дисциплину очистки состояния между тестами, чтобы данные из одного сценария случайно не повлияли на другой.

Для обеспечения качественного тестирования сетевого взаимодействия рекомендуется следующий порядок действий:

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

Другие вопросы этой темы

Связанные вопросы из других тем