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
ocy
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 ofalse
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.
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.
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
- los Configuración sección del Cypress Testing Workshop
- entrada en el blog Mantenga las contraseñas en secreto en las pruebas E2E