Сетевые ошибки в веб-приложениях могут возникать по различным причинам: медленное соединение, потеря пакетов, сбои на сервере или ошибки API. Для полноценного тестирования необходимо уметь имитировать такие условия, чтобы проверить устойчивость приложения к нестабильной сети. Cypress предоставляет инструменты для перехвата и модификации сетевых запросов, позволяя создавать реалистичные сценарии отказов.
Основной инструмент — команда cy.intercept(). Она
позволяет перехватывать HTTP-запросы, изменять их ответ
или симулировать ошибки. Синтаксис базовый:
cy.intercept(method, url, routeHandler)
method — HTTP-метод (GET,
POST и т.д.).url — URL запроса или регулярное выражение для его
сопоставления.routeHandler — объект, функция или фиктивный ответ,
который заменяет реальный.Cypress позволяет искусственно создавать ошибки
сети, используя опцию forceNetworkError.
cy.intercept('GET', '/api/data', {
forceNetworkError: true
}).as('getData');
При таком подходе запрос не будет доходить до сервера, и приложение получит ошибку соединения. Это позволяет проверять корректное отображение уведомлений, повторные попытки или fallback-механизмы.
Другой способ — возврат ответа с ошибочным статусом, имитирующего сбой на сервере:
cy.intercept('POST', '/api/submit', {
statusCode: 500,
body: { error: 'Internal Server Error' },
}).as('submitForm');
Важно различать два сценария:
forceNetworkError) —
запрос не отправляется, имитируется полное отсутствие сети.Для тестирования поведения приложения при медленном интернете
используется опция delay. Она позволяет
искусственно замедлять ответ сервера:
cy.intercept('GET', '/api/data', {
delayMs: 2000,
statusCode: 200,
body: { data: [1, 2, 3] }
}).as('getDataSlow');
Проверка интерфейса при задержках важна для отображения спиннеров, тайм-аутов и прогресс-баров.
Присвоение перехваченным запросам alias через .as()
позволяет ожидать их завершения и выполнять
дополнительные проверки:
cy.wait('@getDataSlow').its('response.statusCode').should('eq', 200);
Alias можно использовать для анализа:
request.body — тело исходного запроса;response.body — тело ответа;response.statusCode — код ответа.Это позволяет проверять, как фронтенд реагирует на конкретные данные или ошибки.
Cypress позволяет комбинировать ошибки сети, задержки и статус-коды, создавая сложные сценарии отказоустойчивости:
cy.intercept('GET', '/api/data', (req) => {
if (Math.random() < 0.3) {
req.reply({ forceNetworkError: true });
} else {
req.reply({ delayMs: 1500, statusCode: 200, body: { data: [] } });
}
}).as('unstableData');
Такой подход имитирует непредсказуемое поведение сети, что полезно для тестирования приложений с высоким уровнем отказоустойчивости.
beforeEach для настройки
перехватов, чтобы тесты оставались изолированными.Симуляция сетевых ошибок работает одинаково локально и в CI/CD-пайплайнах. Важно учитывать:
cy.log() или
встроенные события Cypress для отслеживания сбоев в отчетах.С помощью этих инструментов можно полноценно моделировать любые нештатные сетевые условия, что повышает надежность тестируемого приложения и качество автоматизации.