Realizar pruebas de todo el stack de la aplicación.
Documentar el proceso de acciones que realiza un usuario para completar una tarea.
Facilitar la generación de vídeos documentales sobre cada feature.
Simplificar el proceso de desarrollo al permitir feedback inmediato con la ejecución automática de los tests.
Reducir problemas por regresión al refactorizar algún componente.
Diferencias con Selenium
Selenium corre en un servidor y se comunica con el browser a través de la api WebDriver. Cypress corre en el mismo loop de la aplicación.
Selenium está orientado a eventos asincrónicos. Cypress es sincrónico entre comandos (interfaz chainable).
Cypress tiene una UI de testing mucho más rica. Selenium ofrece la posibilidad de instalar un plugin como asistente.
Diferencias con Selenium
Dificultades
Identificar qué es lo que se quiere testear.
Asegurarse que los tests creados son lo más resilientes posibles.
No testear demasiado.
Organizar los tests para que puedan ser ejecutados en paralelo.
Configurar los componentes para que utilicen la prop `data-cy` de forma apropiada: se tienen que modificar componentes de flui y algunos no son muy amigables.
Beneficios
Fuerza a probar cosas que antes no se hacían: ej, probar las mismas vistas u operaciones con usuarios de distinto rol.
Atrapa regresiones antes de que se publique en producción.
Asegura un buen porcentaje de cobertura de código con pocos tests.
Permite identificar cuellos de botella en la comunicación con el servidor como también estructuras HTML complicadas.