В Cypress, как и в других JavaScript-тестовых фреймворках (Mocha,
Jest), ключевым элементом организации тестов является иерархическая
структура с блоками describe, context и
it. Понимание их роли обеспечивает удобное, читаемое и
поддерживаемое тестирование.
describedescribe используется для группировки связанных тестов.
Он создаёт логическую единицу, которая объединяет сценарии вокруг общей
функциональности или компонента приложения.
describe('Авторизация пользователя', () => {
// тесты и дополнительные блоки внутри
});
Особенности блока describe:
describe, создавая
вложенные группы.before,
beforeEach, after, afterEach) для
подготовки и очистки состояния перед тестами.Пример использования хуков:
describe('Авторизация пользователя', () => {
before(() => {
cy.visit('/login');
});
beforeEach(() => {
cy.reload();
});
it('Проверка успешного входа', () => {
cy.get('#username').type('user');
cy.get('#password').type('password');
cy.get('button[type=submit]').click();
cy.url().should('include', '/dashboard');
});
});
contextcontext является синонимом describe, но
используется для повышения читаемости, когда требуется подчеркнуть
определённое условие или состояние системы.
context('Существующий пользователь', () => {
it('Может войти с корректными данными', () => {
// тест
});
});
Разница между describe и
context:
describe больше акцентирует на функциональности или
модуле.context выделяет конкретные сценарии или состояния,
например «Когда пользователь неактивен» или «Если сессия истекла».itit описывает отдельный тестовый сценарий. Он отвечает за
конкретное поведение, которое необходимо проверить.
it('Показывает сообщение об ошибке при неверном пароле', () => {
cy.get('#username').type('user');
cy.get('#password').type('wrongpassword');
cy.get('button[type=submit]').click();
cy.contains('Неверный пароль').should('be.visible');
});
Характерные особенности блока it:
cy.get, cy.visit, cy.request,
благодаря цепочкам команд (chaining).Структура может быть многослойной: describe →
context → it. Вложенность позволяет разделять
подготовку тестовой среды и конкретные сценарии.
describe('Авторизация пользователя', () => {
context('Существующий пользователь', () => {
it('Может войти с корректными данными', () => {
cy.login('user', 'password');
cy.url().should('include', '/dashboard');
});
it('Не может войти с некорректным паролем', () => {
cy.login('user', 'wrongpassword');
cy.contains('Неверный пароль').should('be.visible');
});
});
context('Новый пользователь', () => {
it('Не может войти без регистрации', () => {
cy.login('newuser', 'password');
cy.contains('Пользователь не найден').should('be.visible');
});
});
});
Cypress поддерживает хуки Mocha, которые можно применять на любом уровне вложенности:
before — выполняется один раз перед всеми тестами
блока.beforeEach — выполняется перед каждым тестом
блока.after — выполняется один раз после всех тестов
блока.afterEach — выполняется после каждого теста блока.Пример:
describe('Авторизация пользователя', () => {
before(() => {
cy.task('resetDatabase');
});
beforeEach(() => {
cy.visit('/login');
});
it('Успешный вход', () => {
cy.login('user', 'password');
cy.url().should('include', '/dashboard');
});
afterEach(() => {
cy.clearCookies();
});
after(() => {
cy.task('cleanupTestUsers');
});
});
describe —
все тесты внутри должны относиться к одному компоненту или
функциональности.context — фокус на
условиях, например «когда данные корректны» или «когда токен
истёк».it — тест должен
проверять только одно поведение.Структура describe → context →
it обеспечивает модульность, читаемость и поддерживаемость
тестов в больших проектах. Правильное использование этих блоков вместе с
хуками позволяет создавать надёжные и предсказуемые автоматизированные
тесты.