Группировка тестов является важным аспектом организации автоматизированного тестирования, особенно при работе с крупными проектами. Cypress предоставляет гибкие инструменты для структурирования тестов, что облегчает поддержку, повторное использование кода и управление зависимостями между тестами.
Ключевым инструментом группировки является функция
describe. Она позволяет объединять связанные тесты в один
логический блок. Это удобно для разделения тестов по функциональным
модулям, страницам или компонентам приложения.
describe('Авторизация пользователя', () => {
it('должна успешно входить с правильными данными', () => {
cy.visit('/login');
cy.get('#username').type('user');
cy.get('#password').type('password');
cy.get('button[type="submit"]').click();
cy.url().should('include', '/dashboard');
});
it('должна показывать ошибку при неправильном пароле', () => {
cy.visit('/login');
cy.get('#username').type('user');
cy.get('#password').type('wrongpassword');
cy.get('button[type="submit"]').click();
cy.get('.error-message').should('be.visible');
});
});
Особенности describe:
describe, что позволяет
создавать иерархию тестов.before,
beforeEach, after, afterEach) для
настройки и очистки состояния перед или после группы тестов.Функция it используется для описания конкретного
тестового сценария. Название теста должно быть информативным и отражать
проверяемое поведение.
it('должен отображать корректное приветствие после входа', () => {
cy.login('user', 'password'); // кастомная команда
cy.get('.welcome-message').should('contain', 'Привет, user');
});
Рекомендации по использованию it:
it должен быть независимым: порядок выполнения
тестов не должен влиять на результаты.Cypress поддерживает вложенные блоки describe, что
позволяет детализировать структуру тестов. Например, для страницы
профиля можно создать блоки для разных разделов: личные данные,
настройки безопасности, уведомления.
describe('Профиль пользователя', () => {
describe('Личные данные', () => {
it('должны корректно отображаться', () => {
cy.visit('/profile');
cy.get('#name').should('have.value', 'Иван');
});
});
describe('Настройки безопасности', () => {
it('должны позволять смену пароля', () => {
cy.visit('/profile/security');
cy.get('#new-password').type('newPass123');
cy.get('button.save').click();
cy.get('.success-message').should('be.visible');
});
});
});
Преимущества вложенных блоков:
Для настройки тестовой среды внутри группы describe
используются хуки:
before() — выполняется один раз перед всеми тестами
блока.beforeEach() — выполняется перед каждым тестом
блока.afterEach() — выполняется после каждого теста
блока.after() — выполняется один раз после всех тестов
блока.describe('Корзина', () => {
before(() => {
cy.visit('/shop');
cy.clearCart();
});
beforeEach(() => {
cy.addItemToCart('product-1');
});
afterEach(() => {
cy.clearCart();
});
it('должна отображать добавленный товар', () => {
cy.get('.cart-item').should('have.length', 1);
});
it('должна корректно подсчитывать сумму', () => {
cy.get('.cart-total').should('contain', '1000');
});
});
Хуки позволяют избегать дублирования кода, обеспечивая повторяемость и предсказуемость тестов.
Для фокусировки на отдельных группах тестов или их временного исключения используются методы:
describe.only() — выполняется только этот блок и его
вложенные тесты.describe.skip() — блок и его тесты пропускаются.it: it.only(),
it.skip().describe('Тесты профиля', () => {
it.only('проверка отображения аватара', () => {
cy.visit('/profile');
cy.get('.avatar').should('be.visible');
});
it('проверка отображения email', () => {
cy.visit('/profile');
cy.get('#email').should('have.value', 'user@example.com');
});
});
describe, чтобы
отчеты оставались читаемыми.Грамотно организованные группы тестов упрощают поддержку, ускоряют отладку и делают отчеты Cypress информативными, особенно при интеграции с CI/CD.