Tuve las mismas preguntas hace unos meses y, después de hablar con muchos desarrolladores y hacer una gran cantidad de investigación, esto es lo que descubrí. Debe probar su JavaScript por unidad, escribir un pequeño conjunto de pruebas de integración de UI y evitar las herramientas de prueba de grabación y reproducción. Déjame explicarte con más detalle.
Primero, considere el test pyramid. Esta es una analogía interesante creada por Mike Cohn que lo ayudará a decidir qué tipo de prueba debe hacer. En la parte inferior de la pirámide están las pruebas unitarias, que son sólidas y proporcionan una respuesta rápida. Estos deberían ser la base de su estrategia de prueba y ocupar así la mayor parte de la pirámide. En la parte superior, tienes las pruebas de UI. Esas son las pruebas que interactúan directamente con su UI, como Selenium, por ejemplo. Aunque estas pruebas pueden ayudarlo a encontrar errores, son más costosas y proporcionan una retroalimentación muy lenta. Además, según la herramienta que utilice, se vuelven muy frágiles y terminará gastando más tiempo en realizar estas pruebas que escribiendo el código de producción real. La capa de servicio, en el medio, incluye pruebas de integración que no requieren una IU. En Rails, por ejemplo, probarías tu interfaz REST directamente en lugar de interactuar con los elementos DOM.
Ahora, volviendo a su pregunta. Descubrí que podía reducir mucho el número de errores en mi proyecto, que es una aplicación web escrita en Spring Roo (Java) con toneladas de JavaScript, simplemente escribiendo suficientes pruebas unitarias para JS. En mi aplicación, hay mucha lógica escrita en JS y ese es el tipo de cosas que estoy probando aquí. No me preocupa cómo se verá realmente la página o si las animaciones se reproducirán como deberían. Pruebo si los módulos que escribo en JS ejecutarán la lógica esperada, si las clases de elementos están asignadas correctamente y si las condiciones de error se manejan bien. Para estas pruebas, he estado usando Jasmine. Esta es una gran herramienta. Es muy fácil de aprender y tiene buenas capacidades de burla, que se llaman espías. Jasmine-jQuery agrega más funcionalidad excelente si está utilizando jQuery. En particular, le permite especificar accesorios, que son fragmentos del código HTML, por lo que no tiene que burlarse manualmente del DOM. He integrado esta herramienta con maven y estas pruebas son parte de mi estrategia de CI.
Debe tener cuidado con las pruebas de IU, especialmente si confía en las herramientas de grabación/reproducción como el Selenio. Debido a que la IU cambia con frecuencia, estas pruebas se siguen interrumpiendo y usted pasará mucho tiempo averiguando si las pruebas realmente fallaron o si están desactualizadas. Además, no agregan tanto valor como las pruebas unitarias. Debido a que necesitan un entorno integrado para ejecutar, lo que más le gusta es ejecutarlos solo después de que termine de desarrollar, cuando el costo de arreglar las cosas es mayor.
Para pruebas de humo/regresión, sin embargo, las pruebas de IU son muy útiles. Si necesita automatizar estos, debe tener cuidado con algunos peligros. Escriba sus pruebas, no las registre. Las pruebas grabadas generalmente se basan en xpaths generados automáticamente que se rompen por cada pequeño cambio que haga en su código. Creo que Cucumber es un buen marco para escribir estas pruebas y puede usarlo junto con WebDriver para automatizar la interacción del navegador. Código pensando en las pruebas. En las pruebas de UI, tendrá que hacer que los elementos sean más fáciles de encontrar para que no tenga que confiar en los xpaths complejos. Agregar los elementos de clase e id donde normalmente no lo harás será frecuente. No escriba pruebas para cada caso de esquina pequeña. Estas pruebas son caras de escribir y tardan demasiado en ejecutarse. Debe centrarse en los casos que exploran la mayor parte de su funcionalidad. Si escribe demasiadas pruebas en este nivel, probablemente probará la misma funcionalidad que ha probado previamente en las pruebas de su unidad (suponiendo que las haya escrito).
En mi proyecto actual, estoy usando Spock y Geb para escribir las pruebas de UI. Encuentro estas herramientas increíbles. Están escritos en Groovy, que se adapta mejor a mi proyecto Java.
Puede obtener algunos consejos muy buenos del libro [Pruebas continuas: con Ruby, Rails y JavaScript] (http://www.amazon.com/Continuous-Testing-Ruby-Rails-JavaScript/dp/1934356700) . He leído este libro hace unos 6 a 8 meses y tenía muchas cosas buenas sobre cómo usar jazmín con nodo para simular un navegador. Desafortunadamente, no tuve la oportunidad de ponerlo en práctica. – Augusto
Interesante podría tener que conseguirlo, gracias :) –