API конфигурации
Cypress позволяет динамически изменять значения конфигурации и переменные окружения из файла плагинов.
Использование
⚠️ Этот код является частью файла файла плагинов и, следовательно, выполняется в среде Node.js. Вы не можете вызвать команды
Cypressилиcyв этом файле, но у вас есть прямой доступ к файловой системе и остальным компонентам операционной системы.
Для изменения конфигурации верните объект из экспортируемой функции файла плагинов.
// cypress/plugins/index.js
module.exports = (on, config) => {
console.log(config) // see everything in here!
// modify config values
config.defaultCommandTimeout = 10000
config.baseUrl = 'https://staging.acme.com'
// modify env var value
config.env.ENVIRONMENT = 'staging'
// IMPORTANT return the updated config object
return config
}
Всякий раз, когда вы возвращаете объект из вашего файла плагинов, Cypress сравнит его с исходной конфигурацией и автоматически установит разрешенные значения в соответствии с вашими возвращаемыми значениями.
Если вы не вернете объект, конфигурация не будет изменена.
Объект
configтакже включает следующие дополнительные значения, которые не являются частью стандартной конфигурации. Эти значения только для чтения и не могут быть изменены из файла плагинов.
configFile: Абсолютный путь к файлу конфигурации. По умолчанию это<projectRoot>/cypress.json, но может быть настроенным путем илиfalseпри использовании флага--config-file.projectRoot: Абсолютный путь к корню проекта (например,/Users/me/dev/my-project)
Разрешенные значения отобразятся во вкладке "Настройки" в тестовом запуске.
Обещания
Кроме того, Cypress будет учитывать и ожидать выполнения обещанных задач. Это позволяет выполнять асинхронные задачи и в конечном итоге разрешать объект изменённой конфигурации. Полный пример см. в примере переключения между несколькими файлами конфигурации.
Примеры
Настройка доступных браузеров
Конфигурация включает список браузеров, найденных на вашей системе, доступных для Cypress.
Подробное руководство по Запуску браузеров предоставляет дополнительную информацию о принципах работы.
В файле плагинов можно отфильтровать список браузеров, переданных внутри объекта config, и вернуть список браузеров, которые должны быть доступны для выбора во время cypress open.
// cypress/plugins/index.js
module.exports = (on, config) => {
// inside config.browsers array each object has information like
// {
// name: 'chrome',
// family: 'chromium',
// channel: 'canary',
// displayName: 'Canary',
// version: '80.0.3966.0',
// path:
// '/Applications/Canary.app/Contents/MacOS/Canary',
// majorVersion: 80
// }
return {
browsers: config.browsers.filter((b) => b.family === 'chromium'),
}
}
При открытии тестового запуска в проекте, использующем вышеуказанные изменения в файле плагинов, в списке доступных браузеров будут отображаться только браузеры Chrome, найденные на системе.
Если вы вернёте пустой список браузеров или
browsers: null, список по умолчанию будет автоматически восстановлен.
Если вы измените список браузеров, вы можете увидеть разрешённую конфигурацию во вкладке Настройки тестового запуска.
Переключение между несколькими файлами конфигурации
Это означает, что вы можете хранить несколько файлов конфигурации и переключаться между ними, например:
cypress.qa.jsoncypress.dev.jsoncypress.prod.json
Как вы организуете вашу конфигурацию и переменные окружения — решать вам.
// promisified fs module
const fs = require('fs-extra')
const path = require('path')
function getConfigurationByFile(file) {
const pathToConfigFile = path.resolve('..', 'config', `${file}.json`)
return fs.readJson(pathToConfigFile)
}
// plugins file
module.exports = (on, config) => {
// accept a configFile value or use development by default
const file = config.env.configFile || 'development'
return getConfigurationByFile(file)
}
Теперь вы можете поменять конфигурацию + переменные окружения следующим образом:
cypress run
cypress run --env configFile=qa
cypress run --env configFile=staging
cypress run --env configFile=production
Каждая из этих сред будет читать конфигурацию из указанных файлов:
cypress/config/development.json
cypress/config/qa.json
cypress/config/staging.json
cypress/config/production.json
Это позволит вам выполнять действия такого типа:
// cypress/config/development.json
{
"baseUrl": "http://localhost:1234",
"env": {
"something": "development"
}
}
// cypress/config/qa.json
{
"baseUrl": "https://qa.acme.com",
"env": {
"something": "qa"
}
}
// cypress/config/staging.json
{
"baseUrl": "https://staging.acme.com",
"env": {
"something": "staging"
}
}
// cypress/config/production.json
{
"baseUrl": "https://production.acme.com",
"env": {
"something": "production"
}
}
Это менее сложный пример. Помните, что у вас есть все возможности Node.js.
Как именно редактировать конфигурацию — решать вам. Вам не обязательно считывать данные из файловой системы; вы можете хранить их в памяти в вашем файле плагинов, если хотите.
Плагины, специфичные для запуска
Вы можете получить доступ к типу выполняемых тестов через свойство config.testingType. Тип тестирования — e2e или component, в зависимости от того, был запущен запуск E2E или тестов компонентов. Это позволяет настраивать плагины, специфичные для запуска.
Условно использовать плагин Cypress React
Условно применяйте плагин Cypress React, если запуск выполняется через компонентные тесты:
module.exports = (on, config) => {
if (config.testingType === 'component') {
require('@cypress/react/plugins/react-scripts')(on, config)
}
return config
}
История
| Версия | Изменения |
|---|---|
| 7.0.0 | Добавлено свойство testingType к config. |
См. также
- Раздел Конфигурации в мастер-классе по тестированию Cypress.
- Статья Скрытие паролей в тестах E2E
© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/plugins/configuration-api