Cuando se escriben pruebas “end-to-end”, Laravel provee un abanico de metodos de ayuda, que hacen que sea fácil hacer clics en los enlaces, llenar campos de formularios e inclusive enviarlos. En el fondo, Laravel usa el componente Symfony BrowserKit para simular el comportamiento de un navegador web. Sin embargo, si la aplicación usa JavaSript y AJAX para cargar las paginas, BrowserKit no es para ti.
Laravel Dusk es la nueva herramienta que es introducida a partir de Laravel 5.4 para resolver este problema.
Dusk es una herramienta de navegador para pruebas end-to-end en aplicaciones habilitadas con JavaScript. Este proporcionará la forma correcta de probar la iteraciones concernientes a una pagina web. En otras palabras, se puede usar Dusk para las acciones como clics en botones y enlaces, llenar formularios hasta incluso arrastrar y soltar!.
Para esto, Dusk esta utilizando “ChromeDrive” y “Facebook PHP-Webdriver” para realizar las pruebas end-to-end. Este puede trabajar con cualquier navegador “Selenium”, pero trae ChromeDrive por defecto que nos ayuda ahorrar las configuraciones previas del JDK o Selenium, lo que lo hace muy fácil de usar sin la necesidad de ir a través del proceso de arranque de Selenium e iniciar su servidor cada vez que se necesiten correr las pruebas. Ademas, segun Taylor Otwell, las pruebas en Dusk son muchas mas rápidas que en el Selenium.
En este orden de ideas, Dusk es mas natural que un BrowserKit; no se tiene que esperar a que algo “termine” o usar sleeping y pausing mientras se espera que las cosas aparezcan. En contraste, Dusk permite aguantar a que ciertas condiciones sean verdaderas en tu código JavaScript o esperar a que los selectores CSS estén disponibles para tener una mejor manera para probar las aplicaciones con JavaScript habilitado.
Además, Dusk tiene entre otras características, guardar un captura de pantalla en las pruebas fallidas automáticamente. De esta forma, se puede observar como estaba la pagina cuando las cosas fueron mal.
Otra característica es que provee de método de ayuda como loginAs, el cual permite asignar una instancia de un usuario de la aplicación, con esto accionará el acceso de usuario, facilitando el trabajo en los URL que se necesiten la autenticación.
También, se permite abrir múltiple ventanas del navegador por prueba, lo cuál es favorable cuando la aplicación tiene integración con sockets y es necesario un tipo de pruebas en estos escenarios. Asimismo, es posible abrir dos ventanas y interactuar con la primera y obtener los resultados en la segunda.
Incluso, Otwell ha agregado algo de información relacionada al entorno de pruebas Dusk; la aplicación contiene u archivo llamado .env.dusk, que define las principales configuraciones del entorno de pruebas.
De manera que, para ejecutar las pruebas Dusk, no se usá PHPUnit directamente. En su lugar, se llamara un comando artisan llamado Dusk, el cual sera un proxy a PHPUnit; esté hará un respaldo del archivo de configuración, para entonces, mover el archivo .env.dusk como archivo de configuración para ser usado en las pruebas. Una vez terminadas las pruebas, se restaurará el archivo .env a su lugar original.
En conclusión, esta integración es una gran herramienta para las mejores practicas y calidad del software escrito utilizando Laravel.