Cypress le permite modificar dinámicamente los valores de configuración y las variables de entorno desde su archivo de complementos.

Uso

⚠️ Este código es parte del archivo de complementos y así se ejecuta en el entorno Node. No puedes llamar Cypress o cy comandos en este archivo, pero tiene acceso directo al sistema de archivos y al resto del sistema operativo.

Para modificar la configuración, devuelve un objeto de la función exportada del archivo de complementos.

// 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
}

Siempre que devuelva un objeto de su pluginFile, Cypress tomará esto y lo “diferenciará” con la configuración original y establecerá automáticamente los valores resueltos para que apunten a lo que usted devolvió.

Si no devuelve un objeto, la configuración no se modificará.

los config El objeto también incluye los siguientes valores adicionales que no forman parte de la configuración estándar. Estos valores son de solo lectura y no se pueden modificar desde el archivo de complementos.

  • configFile: La ruta absoluta al archivo de configuración. Por defecto, esto es <projectRoot>/cypress.json, pero puede ser una ruta personalizada o false si usa el --config-file bandera.
  • projectRoot: La ruta absoluta a la raíz del proyecto (p. Ej. /Users/me/dev/my-project)

Los valores resueltos aparecerán en la pestaña “Configuración” de Test Runner.

Configuración resuelta en la aplicación de escritorio

Promesas

Además, Cypress respetará y esperará las promesas de su regreso. Esto le permite realizar tareas asincrónicas y eventualmente resolver con el objeto de configuración modificado. Consulte el ejemplo sobre el cambio entre varios archivos de configuración para ver un ejemplo completo.

Ejemplos de

Personaliza los navegadores disponibles

La configuración incluye la lista de navegadores que se encuentran en su sistema y que están disponibles para Cypress.

Lea nuestra guía completa en Lanzamiento de navegadores para obtener más información sobre cómo funciona esto.

En el archivo de complementos, puede filtrar la lista de navegadores pasados ​​dentro del config objeto y devolver la lista de navegadores que desea que estén disponibles para su selección durante 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'),
  }
}

Cuando abre Test Runner en un proyecto que utiliza las modificaciones anteriores en su archivo de complementos, solo los navegadores Chrome que se encuentran en el sistema se mostrarán en la lista de navegadores disponibles.

Lista filtrada de navegadores Chrome

Si devuelve una lista vacía de navegadores o browsers: null, la lista predeterminada se restaurará automáticamente.

Si modifica la lista de navegadores, puede ver la configuración resuelta en el Ajustes pestaña del Test Runner.

Cambiar entre varios archivos de configuración

Esto significa que puede hacer cosas como almacenar varios archivos de configuración y cambiar entre ellos como:

  • cypress.qa.json
  • cypress.dev.json
  • cypress.prod.json

La forma en que elija organizar su configuración y las variables de entorno depende de usted.

// 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)
}

Ahora puede intercambiar configuración + variables de entorno así:

cypress run
cypress run --env configFile=qa
cypress run --env configFile=staging
cypress run --env configFile=production

Cada uno de estos entornos leería en la configuración en estos archivos:

cypress/config/development.json
cypress/config/qa.json
cypress/config/staging.json
cypress/config/production.json

Esto le permitiría hacer cosas como esta:

// 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"
  }
}

Este es un ejemplo menos complicado. Recuerde: tiene todo el poder de Node a su disposición.

La forma en que elija editar la configuración depende de usted. No tiene que leer el sistema de archivos; puede almacenarlos todos en la memoria dentro de su pluginsFile si querías.

Complementos específicos del corredor

Puede acceder al tipo de pruebas que se ejecutan a través del config.testingType propiedad. El tipo de prueba es e2e o component dependiendo de si el E2E o Prueba de componentes se lanzó el corredor. Esto le permite configurar complementos específicos para el corredor.

Utilice Cypress React Plugin condicionalmente

Aplique condicionalmente el complemento Cypress React si se inicia a través de la prueba de componentes:

module.exports = (on, config) => {
  if (config.testingType === 'component') {
    require('@cypress/react/plugins/react-scripts')(on, config)
  }

  return config
}

Historia

Versión Cambios
7.0.0 Adicional testingType propiedad a config.

Ver también