¿Son necesarias las pruebas unitarias para los desarrolladores front-end?

Me gusta el desglose de la respuesta de Alan Mellor, pero creo que sería útil aclarar algún término de confusión, que no es culpa de Alan, por cierto.

Las pruebas unitarias se refieren a la actividad de realizar, de forma manual o automatizada, un conjunto de pruebas en una sola “unidad” de código. Esa unidad se puede definir como desee, y depende en gran medida de cómo esté estructurada su aplicación.

El término confusión se infiltra en los marcos MVC front-end como AngularJS y ReactJS, que tienen características de prueba incorporadas en su nivel de “módulo” autodefinido. Debido a esas características, muchos desarrolladores front-end parecen referirse a este tipo de prueba de módulo como la única “prueba de unidad” verdadera, a menudo en contraste con las formas más antiguas de prueba de IU, que simplemente definen la unidad en un nivel superior ( por ejemplo, una sola página, un formulario de 3 pasos, etc.). Esas características de prueba integradas son muy elegantes, lo que permite simular fácilmente las “interacciones” de los pseudousuarios mediante un código de prueba, lo que facilita la prueba de piezas individuales de una IU altamente dinámica.

De vuelta a tu pregunta. Creo que la respuesta práctica es que cualquier front-end lo suficientemente complejo va a imponer una necesidad de pruebas unitarias. Si existe un problema de costo insuperable, puede elegir delegar esa prueba a sus usuarios finales. Pero incluso entonces, ayuda a dividir una aplicación compleja en “unidades” de nivel superior y proporcionar al menos un menú desplegable en su formulario de ticket de soporte para guiar a los usuarios finales a darle algunos detalles sobre qué parte del código está funcionando mal.

Si tiene una aplicación front-end dinámica compleja que no está construida sobre un marco de prueba de módulos como Angular o React, la batalla no se pierde. Todavía puede hacer pruebas unitarias, incluso a nivel de módulo (suponiendo que tenga módulos); si no, a nivel de flujo de trabajo. Las pruebas a nivel de flujo de trabajo son más rentables y una opción completamente viable incluso para aplicaciones profesionales. Permite ciclos de liberación mucho más rápidos con el riesgo conocido de permitir la entrada de errores relativamente menores.

Si bien es cierto que la automatización de las pruebas de aplicaciones web con navegadores aprovechados que utilizan Selenium SDK (también consulte phantomjs / casperjs) puede ser complicado y escamoso en comparación con llamar a métodos de prueba internos en Angular o React, a menudo es una buena propuesta de costo-beneficio en complejas aplicaciones profesionales que realizan pruebas de regresión a nivel de flujo de trabajo. No solo es independiente del framework, sino que también es más realista, captando problemas del usuario final que los métodos de interacción de la interfaz de usuario sintética ni siquiera ven como problemas (por ejemplo, un elemento clave de la interfaz de usuario está oculto por otro elemento y no se puede hacer clic en él).

También hay un número creciente de herramientas y servicios que se hacen cargo de mantener y ejecutar pruebas automatizadas en un horario. Los ejemplos incluyen sitios como Cross browser testing gratis. Selenium IDE integración. y (mi propio servicio) Inicio – QA2L.

Considere las alternativas:

  • Prueba del navegador Uso de cosas como Selenium. Estas pruebas son bastante difíciles de escribir. Mucha XPath y mucha ‘waitForElement’ pasando. Tienden a ser bastante descamables, ya que pueden pasar una vez y fallar la siguiente. Por lo general, debido a la naturaleza asincrónica. Entonces no son muy confiables. Y el XPath en sus accesorios necesita actualizarse con cada pequeño cambio.
  • Ad Hoc Manual QA Simplemente abusar del sitio como lo haría un usuario. A medida que su aplicación crece en funciones, esto se vuelve más difícil y más aburrido de hacer. Lo que lleva a:
  • Procedimiento de prueba manual de control de calidad Usted anota todas las pruebas manuales de la IU que se repetirán en cada versión, como una prueba de regresión.
  • No hacer nada Otra opción preferida. Empuje la carga de las pruebas a sus clientes que pagan / leales. Eleve boletos de defectos para cada tweet enojado.

De repente, el código de presentación de prueba de la unidad se ve bastante bien.

Las IU de pruebas unitarias pueden ser difíciles.

Debe desacoplar la tecnología de representación de la lógica de presentación. Algunos marcos ya han hundido ese barco antes de comenzar.

Pero incluso los más modernos necesitan que sus desarrolladores front-end respeten esas capas. Esa es una disciplina que tendrá que mantener como líder tecnológico.

Un buen y antiguo ejemplo de C ++ de la técnica de diseño que necesita está aquí:

http://home.arcor.de/fbdiplom/li

En cualquier idioma, así es como desacopla el código de presentación. Los términos más modernos incluyen ‘DOM virtual’, pero es lo mismo.

No es estrictamente necesario, pero nunca recomendaría un desarrollador front-end para un concierto que no haya probado el código de la interfaz de usuario. Si te tomas en serio una carrera en la construcción de aplicaciones web o móviles, realmente no puedes evitar las pruebas unitarias … ni deberías hacerlo.