PHP con Docker. Cypress
Aunque algunos frameworks como Laravel tienen sus librerías de test end to end más o menos integradas, en este caso sería el Laravel Dusk, tal vez por diversos motivos queramos usar cypress para nuestros tests de aceptación.
En este post explicaré una configuración sencilla para hacer test cypress con docker.
Añadiendo servicio e2e cypress a docker-compose.yml
Para hacer la prueba he usado el framework ligero de PHP que publique en GitHub.
Simplemente tendremos que añadir la carpeta e2e del anterior repositorio y añadir el servicio a vuestro docker-compose.yml:
e2e:
image: cypress
links:
- app:lpf.local
depends_on:
- app
environment:
- CYPRESS_baseUrl=http://lpf.local:8080
- DISPLAY=unix${DISPLAY}
command: tail -f /dev/null
volumes:
- ./e2e/cypress:/app/cypress
- ./e2e/cypress.json:/app/cypress.json
- /dev/shm:/dev/shm
- /tmp/.X11-unix:/tmp/.X11-unix
Como véis, en el servicio usamos la imagen de cypress:
- Añadimos el link a la app para que desde el contendor de cypress se pueda acceder al servicio donde corre la misma.
- En el entorno le pasamos la URL a partir de la cual tendrá que ejecutar los tests.
- Compartimos la carpeta cypress para meter los tests en el contenedor y la configuración del fichero cypress.json.
- Por último, añadimos un volumen y variable de entorno, para que los tests se puedan ejecutar en nuestra pantalla (.X11-unix, DISPLAY) y el volumen /dev/shm para no tener problemas de memoría.
Ejecutando los tests.
Para ejecutar los tests sin tener que entrar en el contenedor ejecutad los siguientes comandos:
DISPLAY=:0 # Aquí tienes que poner tu display, suele ser :0, pero puedes averiguarlo con el comando who.
export DISPLAY
xhost +
Ya por último si queremos ejecutar los tests en consola:
docker-compose exec e2e npx cypress run
Si preferimos abrir la consola de cypress para ejecutar los tests:
docker-compose exec e2e npx cypress open