Файл cypress.config.js является центральным элементом
настройки Cypress-проектов. Он управляет поведением тестовой среды,
параметрами запуска и интеграцией с внешними инструментами. Этот файл
создаётся в корне проекта и экспортирует объект конфигурации, который
Cypress использует при запуске тестов.
Типичный файл cypress.config.js выглядит следующим
образом:
const { defineConfig } = require('cypress');
module.exports = defineConfig({
e2e: {
baseUrl: 'http://localhost:3000',
specPattern: 'cypress/e2e/**/*.cy.js',
supportFile: 'cypress/support/e2e.js',
viewportWidth: 1280,
viewportHeight: 720,
defaultCommandTimeout: 8000,
pageLoadTimeout: 60000,
},
env: {
apiUrl: 'http://localhost:5000/api',
loginUser: 'testuser'
},
retries: {
runMode: 2,
openMode: 0
},
reporter: 'mochawesome',
reporterOptions: {
reportDir: 'cypress/reports',
overwrite: false,
html: true,
json: true
}
});
Ключевые блоки конфигурации:
Блок e2e включает несколько важных параметров:
baseUrl — базовый URL для всех тестов. Упрощает
написание команд cy.visit('/') без указания полного
адреса.specPattern — шаблон поиска файлов тестов. Позволяет
структурировать проект по папкам и именам файлов.supportFile — путь к файлу поддержки, где подключаются
общие команды и хуки.viewportWidth и viewportHeight — размеры
окна браузера, имитирующие конкретное устройство.defaultCommandTimeout — максимальное время ожидания для
команд Cypress, таких как cy.get или
cy.click.pageLoadTimeout — таймаут ожидания полной загрузки
страницы.Пример расширенной настройки с разными браузерами:
e2e: {
baseUrl: 'http://localhost:3000',
browser: 'chrome',
specPattern: 'cypress/e2e/**/*.cy.js',
setupNodeEvents(on, config) {
// слушатели событий Node.js, например логирование или кастомные плагины
}
}
Переменные в блоке env удобно использовать для хранения
конфиденциальных данных или параметров, изменяющихся между средами:
env: {
apiUrl: 'https://staging.example.com/api',
adminUser: 'admin',
adminPassword: 'secret'
}
Доступ к переменным осуществляется через
Cypress.env():
cy.request({
method: 'POST',
url: `${Cypress.env('apiUrl')}/login`,
body: { username: Cypress.env('adminUser'), password: Cypress.env('adminPassword') }
});
Использование env улучшает переносимость тестов между
локальной средой, staging и production.
Настройки таймаутов помогают управлять ожиданием элементов и страниц:
defaultCommandTimeout — стандартное время ожидания
команд Cypress.pageLoadTimeout — время ожидания полной загрузки
страницы.responseTimeout — максимальное время ожидания ответа от
сервера при API-запросах.Повторные попытки тестов на случай временных сбоев настраиваются
через retries:
retries: {
runMode: 2, // количество повторов при запуске через CLI
openMode: 0 // количество повторов в интерактивном режиме
}
Файл конфигурации поддерживает настройку плагинов через
setupNodeEvents:
setupNodeEvents(on, config) {
// Пример: плагин для скриншотов
const { addMatchImageSnapshotPlugin } = require('cypress-image-snapshot/plugin');
addMatchImageSnapshotPlugin(on, config);
// Возврат конфигурации с изменениями
return config;
}
setupNodeEvents используется для регистрации любых
Node.js событий: логирования, модификации тестовой конфигурации,
интеграции с CI/CD или внешними сервисами.
Cypress поддерживает различные репортеры для формирования отчетов о тестах:
reporter: 'mochawesome',
reporterOptions: {
reportDir: 'cypress/reports',
overwrite: false,
html: true,
json: true
}
Репортеры позволяют интегрировать Cypress с CI/CD, генерировать отчеты в форматах HTML и JSON, а также хранить историю тестов.
supportFile для хранения общих команд и
хуков, чтобы не дублировать код.specPattern по папкам, чтобы легко
масштабировать тесты при увеличении проекта.env или в
.env файлах и подключать через dotenv.Файл cypress.config.js является гибким инструментом для
полного контроля над тестовой средой, обеспечивая стабильность,
масштабируемость и интеграцию Cypress с другими инструментами.