Cypress предоставляет гибкий механизм управления конфигурацией тестового окружения, который позволяет изменять поведение тестов на уровне проекта, отдельных файлов или конкретных тестов. Понимание того, как правильно переопределять настройки, критически важно для построения масштабируемых и надежных автоматизированных сценариев.
Cypress поддерживает несколько уровней конфигурации:
Глобальная конфигурация проекта
(cypress.config.js или cypress.config.ts)
Определяет базовые настройки, действующие на все тесты по умолчанию.
Примеры параметров: baseUrl, viewportWidth,
viewportHeight, defaultCommandTimeout,
retries.
const { defineConfig } = require('cypress');
module.exports = defineConfig({
e2e: {
baseUrl: 'https://example.com',
defaultCommandTimeout: 8000,
retries: 2
},
viewportWidth: 1280,
viewportHeight: 720
});Конфигурация на уровне среды (environment variables) Используется для передачи параметров в тесты, которые могут отличаться для различных сред (staging, production, local).
module.exports = defineConfig({
env: {
apiUrl: 'https://api.example.com',
userRole: 'admin'
}
});
В тесте доступ к этим значениям осуществляется через
Cypress.env('apiUrl').
Переопределение конфигурации на уровне отдельного файла
или теста Cypress позволяет локально изменять настройки с
помощью Cypress.config(). Это удобно для случаев, когда
нужно изменить таймаут или базовый URL только для конкретного
сценария.
describe('Тест с переопределенной конфигурацией', () => {
before(() => {
Cypress.config('defaultCommandTimeout', 15000);
});
it('Выполняет долгий запрос', () => {
cy.visit('/slow-page');
cy.get('#data').should('be.visible');
});
});
Важно: изменения через Cypress.config() действуют только
в пределах выполнения текущего теста или блока
describe.
Для поддержки нескольких окружений используют сочетание
--config и --env при запуске из CLI:
npx cypress run --config baseUrl=https://staging.example.com --env userRole=tester
--config позволяет временно переопределить любые
параметры конфигурации, указанные в cypress.config.js.--env передает переменные окружения в тесты без
изменения кода конфигурации.Можно также создавать отдельные конфигурационные файлы для среды:
cypress.config.staging.js
cypress.config.production.js
И запускать их через:
npx cypress run --config-file cypress.config.staging.js
Некоторые настройки требуют переопределения на уровне плагинов.
Например, изменение поведения fileServerFolder, настройка
репортера или интеграция с внешними сервисами. В
cypress.config.js можно задать функцию
setupNodeEvents:
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
if (config.env.userRole === 'admin') {
config.defaultCommandTimeout = 20000;
}
return config;
}
}
});
setupNodeEvents выполняется перед стартом тестов и
позволяет программно модифицировать конфигурацию, исходя из условий
среды или переданных переменных.
Cypress поддерживает динамическое изменение настроек даже в середине выполнения теста. Это может понадобиться для эмуляции разных разрешений экрана или таймаутов для конкретного шага:
it('Меняет viewport и таймаут на лету', () => {
cy.viewport(1920, 1080);
Cypress.config('defaultCommandTimeout', 10000);
cy.visit('/dashboard');
cy.get('#analytics').should('exist');
});
Такой подход полезен при тестировании интерфейсов, которые ведут себя по-разному в разных разрешениях или при работе с нестабильными внешними сервисами.
Понимание порядка применения настроек помогает избегать неожиданных конфликтов:
cypress.config.js.--config-file в CLI.--config и --env в
CLI.Cypress.config() внутри
тестов.Значение, установленное на более высоком уровне (например, глобально
в cypress.config.js), может быть переопределено локально,
но только до завершения блока, где оно применено.
Cypress.config() и cy.viewport() внутри
конкретного блока describe или it.env подходят для хранения
чувствительных данных, таких как токены или логины, не включаемых
напрямую в код.setupNodeEvents позволяет адаптировать
конфигурацию в зависимости от условий запуска, сохраняя единый файл
конфигурации.Эти механизмы делают Cypress мощным инструментом для написания гибких и масштабируемых тестов, где переопределение конфигураций становится основой надежного управления тестовым окружением.