Resumen

Conectar tus pruebas automatizadas con una base de datos relacional es una habilidad fundamental para validar que la información se almacena y se consulta correctamente. Aquí aprenderás a configurar MySQL con Cypress, crear un plugin personalizado y proteger tus credenciales mediante variables de entorno, todo con código JavaScript funcional.

¿Cómo instalar y configurar la librería MySQL en Cypress?

El primer paso es instalar la librería necesaria. En este caso se utiliza el paquete mysql, que se instala rápidamente con npm. Una vez instalado, se importa dentro del archivo de plugins de Cypress [00:28]:

javascript const mysql = require('mysql');

Con esta línea ya tienes disponible la librería para crear conexiones y ejecutar consultas directamente desde tus pruebas.

¿Cómo crear la función de consulta a la base de datos?

La función queryTestDB es el corazón de este plugin. Recibe dos parámetros: el query (la consulta SQL) y la configuración (los datos de conexión). Dentro, se crea la conexión usando mysql.createConnection y se devuelve una promesa [01:15]:

javascript function queryTestDB(query, config) { const connection = mysql.createConnection(config.env.db); connection.connect(); return new Promise((resolve, reject) => { connection.query(query, (error, results) => { if (error) { return reject(error); } connection.end(); return resolve(results); }); }); }

El uso de promesas permite manejar la naturaleza asíncrona de las consultas. Si ocurre un error, la promesa se rechaza con reject. Si todo sale bien, se cierra la conexión con connection.end() para no dejar conexiones abiertas y se resuelve con los resultados.

¿Cómo registrar el plugin con on task?

Dentro de module.exports, se registra la tarea usando on('task', ...). Esto expone la función para que pueda ser invocada desde cualquier prueba con cy.task [02:48]:

javascript module.exports = (on, config) => { on('task', { queryDB(query) { return queryTestDB(query, config); } }); };

La variable config llega automáticamente cuando Cypress ejecuta los plugins, así que no necesitas pasarla manualmente.

¿Cómo proteger las credenciales con variables de entorno en Cypress?

Guardar contraseñas y datos de conexión directamente en cypress.json no es recomendable porque ese archivo suele subirse al repositorio. La solución es crear un archivo llamado cypress.env.json en la raíz del proyecto y añadirlo al .gitignore [03:20]:

{ "db": { "host": "tu-host", "user": "tu-usuario", "password": "tu-password", "database": "tu-base-de-datos" } }

Cypress lee automáticamente este archivo y lo incorpora en config.env. La propiedad se llama db porque así se definió en el archivo; si cambias el nombre, debes actualizarlo también en la función del plugin. Esta estructura con host, user, password y database es el formato estándar que la librería de MySQL espera para crear la conexión [04:10].

¿Cómo ejecutar una consulta SQL desde una prueba de Cypress?

Con el plugin listo y las variables de entorno configuradas, escribir la prueba es muy directo. Se crea un archivo de especificación y se usa cy.task para invocar la tarea registrada [05:00]:

javascript describe('Pruebas a base de datos', () => { it('Probar un SELECT', () => { cy.task('queryDB', 'SELECT * FROM pruebas') .then((results) => { cy.log(results); }); }); });

  • cy.task('queryDB', ...) manda a llamar al plugin con el nombre exacto de la tarea registrada.
  • El segundo argumento es la consulta SQL que se desea ejecutar.
  • Los resultados se reciben en el .then() y se pueden validar o registrar con cy.log.

Al correr la prueba, Cypress recarga la configuración porque detecta cambios en los archivos del plugin. En este ejemplo, la base de datos está vacía pero la prueba es exitosa: no devuelve errores y ejecuta correctamente el query [05:38].

Este enfoque es extensible a otros tipos de consultas como INSERT o DELETE, lo que permite validar operaciones CRUD completas directamente desde tus pruebas automatizadas. ¿Ya probaste conectar Cypress con tu base de datos local? Comparte tu experiencia en los comentarios.

      Pruebas de Bases de Datos Relacionales con MySQL y Cypress