Cypress предоставляет мощные возможности для тестирования сетевых
взаимодействий веб-приложений. Основным инструментом для работы с сетью
является команда cy.intercept(), которая позволяет
перехватывать HTTP-запросы, модифицировать их или проверять поведение
приложения при различных сценариях.
cy.intercept() заменяет устаревший
cy.route() и позволяет управлять как запросами, так и
ответами. С помощью этой команды можно:
Пример перехвата GET-запроса и замены ответа:
cy.intercept('GET', '/api/users', { fixture: 'users.json' }).as('getUsers');
cy.visit('/users');
cy.wait('@getUsers').its('response.statusCode').should('eq', 200);
В этом примере:
/api/users — URL запроса, который перехватывается.{ fixture: 'users.json' } — заранее подготовленный файл
с данными, который возвращается вместо реального ответа..as('getUsers') — присваивает алиас для удобного
ожидания и проверки запроса.Cypress позволяет не только проверять корректность данных, но и
измерять время отклика серверов. Для этого используется
объект ответа, доступный через cy.wait().
cy.intercept('GET', '/api/data').as('getData');
cy.visit('/dashboard');
cy.wait('@getData').then((interception) => {
expect(interception.response.duration).to.be.lessThan(500);
});
interception.response.duration возвращает время в
миллисекундах, затраченное на получение ответа.Для тестирования устойчивости приложения полезно создавать искусственные задержки или ошибки:
cy.intercept('GET', '/api/data', {
delay: 1000, // задержка 1 секунда
statusCode: 500,
body: { error: 'Internal Server Error' }
}).as('getDataFail');
cy.visit('/dashboard');
cy.wait('@getDataFail');
Такой подход позволяет:
Cypress поддерживает отслеживание серий запросов и их зависимости. Можно убедиться, что один запрос выполняется после другого:
cy.intercept('POST', '/api/login').as('login');
cy.intercept('GET', '/api/profile').as('getProfile');
cy.get('button#login').click();
cy.wait('@login').its('response.statusCode').should('eq', 200);
cy.wait('@getProfile').its('response.statusCode').should('eq', 200);
cy.intercept() поддерживает шаблоны и регулярные
выражения, что упрощает тестирование API с динамическими
параметрами:
cy.intercept('GET', /\/api\/users\/\d+/).as('getUser');
cy.visit('/users/123');
cy.wait('@getUser').then((interception) => {
expect(interception.request.url).to.match(/\/api\/users\/123/);
});
Для тестирования отправки данных на сервер можно подменять ответы на POST и PUT запросы:
cy.intercept('POST', '/api/users', {
statusCode: 201,
body: { id: 101, name: 'Test User' }
}).as('createUser');
cy.get('form#new-user').submit();
cy.wait('@createUser').its('response.statusCode').should('eq', 201);
Для анализа поведения приложения полезно выводить подробные логи:
cy.intercept('GET', '/api/data', (req) => {
req.continue((res) => {
console.log('Запрос:', req.url);
console.log('Ответ:', res.body);
});
});
Файлы с фикстурой позволяют хранить сложные объекты и использовать их многократно:
cy.fixture('products.json').then((products) => {
cy.intercept('GET', '/api/products', products).as('getProducts');
});
cy.visit('/products');
cy.wait('@getProducts');
Cypress полностью асинхронен, поэтому важно корректно работать с
ожиданиями запросов. Использование cy.wait() гарантирует,
что тест не продолжится до получения нужного ответа.
cy.intercept('GET', '/api/messages').as('getMessages');
cy.get('button#load-messages').click();
cy.wait('@getMessages').then(({ response }) => {
expect(response.body).to.have.length.greaterThan(0);
});
Cypress позволяет тестировать приложение как с подменными ответами, так и с реальными API, используя одинаковый подход:
Cypress предоставляет полный контроль над сетевой активностью, что
позволяет тестировать производительность, устойчивость,
обработку ошибок и корректность данных. Использование
cy.intercept(), фикстур, алиасов и асинхронных ожиданий
обеспечивает мощный инструмент для построения надежных и
детализированных тестов сетевой логики.