Contenido del curso
Conociendo Cypress
Validando el contenido de la respuesta
Haciendo diferentes tipos de peticiones
Bases de Datos
Prueba en conjunto
Próximos pasos
Conectar Cypress a MySQL sin exponer secretos
Resumen
Probar bases de datos relacionales desde Cypress te permite validar que tus queries funcionan correctamente sin exponer credenciales en tu repositorio. Aquí aprenderás a configurar un plugin con la librería MySQL, conectar tu base de datos relacional y ejecutar tu primer select desde una prueba automatizada, ideal si trabajas con QA automation o testing de integración.
¿Cómo instalar y configurar la librería MySQL en Cypress?
El primer paso es instalar la librería MySQL en tu proyecto, ya que será la encargada de abrir la conexión y ejecutar los queries contra tu base de datos relacional [00:35].
Una vez instalada, abre el archivo index.js dentro de la carpeta de plugins e importa la librería con const mysql = require('mysql'). Este archivo es el puente entre Cypress y servicios externos como bases de datos.
¿Por qué usar un plugin en Cypress para conectar a MySQL? Porque Cypress corre en el navegador y no puede ejecutar conexiones directas a bases de datos. Los plugins viven en Node, así que ahí sí puedes abrir conexiones, ejecutar queries y devolver resultados a tus tests.
¿Cómo crear la función queryTestDb?
Antes del module.exports, declara una función llamada queryTestDb que reciba dos parámetros: el query y la config [02:05]. Dentro de esa función:
- Crea la conexión con
mysql.createConnection(config.env.db). - Llama a
connection.connect()para abrir el canal. - Retorna una nueva promesa con
resolveyrejectcomo parámetros del callback. - Ejecuta
connection.query(query, (error, results) => {...}). - Si hay error, rechaza la promesa con
reject(error). - Si no, cierra la conexión con
connection.end()y resuelve conresolve(results).
Cerrar la conexión después de cada query es clave: evita dejar conexiones abiertas que saturen tu base de datos.
¿Cómo registrar el plugin con on task en Cypress?
Dentro del module.exports, usa on('task', {...}) para registrar una tarea llamada queryDb [04:10]. Esta tarea recibe el query como parámetro y retorna la función queryTestDb(query, config).
El objeto config lo provee Cypress automáticamente cuando ejecuta los plugins, así que no necesitas pasarlo manualmente. Esto te permite invocar tu plugin desde cualquier test usando cy.task('queryDb', 'tu query').
¿Cómo proteger credenciales con cypress.env.json?
Guardar credenciales directamente en cypress.json no es seguro porque ese archivo suele estar versionado. La solución es crear en la raíz del proyecto un archivo llamado cypress.env.json y agregarlo a tu .gitignore [05:20].
¿Qué es cypress.env.json y para qué sirve? Es un archivo de variables de entorno que Cypress lee automáticamente y expone en
config.env. Lo usas para guardar secretos como hosts, usuarios o contraseñas sin subirlos a tu repositorio.
La estructura del archivo debe seguir el formato que la librería MySQL espera para crear conexiones:
{ "db": { "host": "tu_host", "user": "tu_usuario", "password": "tu_password", "database": "tu_base_de_datos" } }
La propiedad db es arbitraria, tú decides cómo nombrarla, pero debe coincidir con la forma en que la accedes desde el plugin: config.env.db. Si la nombras aaa, así tienes que invocarla en ambos lados.
¿Por qué usar host, user, password y database?
Porque esa es la estructura exacta que la librería MySQL espera para abrir una conexión. Si te has conectado antes a una base de datos relacional, este formato te resultará familiar. Cualquier campo extra o mal nombrado provocará que la conexión falle.
¿Cómo ejecutar tu primera prueba contra la base de datos?
Crea un archivo llamado bd.spec.js dentro de la carpeta de tests [07:45]. Dentro escribe un bloque describe con el título "Pruebas a base de datos" y un it que pruebe un select.
Dentro del test, invoca el plugin así:
javascript cy.task('queryDb', 'select * from pruebas').then((results) => { console.log(results); });
Guarda los cambios, abre Cypress y ejecuta la prueba. Si todo está configurado correctamente, verás que la prueba pasa exitosamente, te regresa un arreglo (vacío si la tabla no tiene datos) y no lanza ningún error.
¿Qué hace cy.task en Cypress? Es el método que dispara una tarea registrada en los plugins. Le pasas el nombre de la tarea y los parámetros, y recibes en el
thenlo que la promesa resuelva, en este caso los resultados del query.
¿Qué validaste con esta configuración?
- Que la librería MySQL se conecta correctamente con las credenciales de
cypress.env.json. - Que el plugin
queryDbejecuta queries y devuelve resultados. - Que las variables de entorno protegen tus secretos del repositorio.
- Que un select básico funciona como punto de partida para pruebas más complejas.
En la siguiente clase llevarás esto al siguiente nivel probando insert y delete, para validar que tu plugin soporta cualquier tipo de consulta que necesites lanzar contra tu base de datos. ¿Tú cómo proteges las credenciales de tus pruebas? Cuéntame en los comentarios.