Spec-Zone.ru › Cypress

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)

Разрешенные значения отобразятся во вкладке "Настройки" в тестовом запуске.

Resolved configuration in the Desktop app

Обещания

Кроме того, 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, найденные на системе.

Filtered list of Chrome browsers

Если вы вернёте пустой список браузеров или browsers: null, список по умолчанию будет автоматически восстановлен.

Если вы измените список браузеров, вы можете увидеть разрешённую конфигурацию во вкладке Настройки тестового запуска.

Переключение между несколькими файлами конфигурации

Это означает, что вы можете хранить несколько файлов конфигурации и переключаться между ними, например:

  • cypress.qa.json
  • cypress.dev.json
  • cypress.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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API