¿Cómo prueba la validez del HTML generado por taglibs o código de representación HTML en sus aplicaciones?

Depende de lo que estoy tratando de hacer.

¿Estoy aprendiendo cómo funciona una biblioteca de etiquetas existente? Si es así, entonces creo un proyecto simple, instalo la biblioteca de etiquetas, la uso para generar algo de HTML, luego uso algo como HTMLUnit (cualquier analizador HTML servirá) para verificar los resultados. De esta manera, puedo explorar todas las características que tiene la biblioteca de etiquetas sin mezclar esas pruebas con las pruebas del comportamiento central de mi proyecto. Puedo usar lo que aprendo de estas Pruebas de aprendizaje, es decir, el contrato de las características de la biblioteca de etiquetas que me importan, para escribir pruebas de mi comportamiento central que hagan suposiciones seguras (r) sobre lo que hacen las bibliotecas de etiquetas.

¿Estoy creando mi propia biblioteca de etiquetas? Por lo general, creo etiquetas personalizadas extrayendo duplicación de HTML, por lo que cualquier prueba que ya tenga para HTML prueba indirectamente mis etiquetas personalizadas. Una vez que siento que tengo una biblioteca adecuada y reutilizable, entonces la trato como la respuesta anterior de “biblioteca de etiquetas existente”.

¿Estoy probando otro código de vista que genera HTML, lo que significa que no es una biblioteca de etiquetas? En este caso, me aseguro de separar ese código del resto del sistema. No quiero tener clic-clic-clic para llegar a la página correcta y poder verificar el HTML resultante. (Automatizar el clic-clic-clic con algo como Selenium no hace que este problema desaparezca; simplemente hace que sea más fácil tolerar el problema … por un tiempo). Esto significa encontrar una manera de representar mi plantilla HTML directamente sin invocar el resto de la aplicación Cómo hacer esto varía de un marco a otro. Es una de las razones por las que, en la década de 2000, prefería usar un motor de plantillas HTML como Velocity en lugar de usar JSP. Nunca descubrí cómo representar de forma confiable un JSP sin involucrar al resto del contenedor web y sus tonterías. ¿Hay motores JSP independientes ahora? No lo sé.

Sé que RSpec hace esto bien por Rails. Simplemente puedo representar una plantilla de vista con los datos que desee, y nunca tengo que invocar un controlador ni ejecutar el resto del sistema. Ahora * cómo * RSpec-Rails hace esto equivale a matar gatitos, pero eso se debe principalmente a que a Rails le gusta acoplar todo a todo lo demás y espera que te guste. Intento ignorar el maullido de los gatitos moribundos mientras ejecuto las especificaciones de mi vista.

Las cosas más importantes:

1. Para verificar el HTML que genera X, ejecute X sin ejecutar las cosas que invocan a X. Esto es cierto para X = procesador JSP; X = motor de plantillas HTML; X = lo que sea. Escribe una prueba como esta:

  htmlAsString = render (plantilla, dictionaryOfDynamicDataToDisplayOnTemplate)
 htmlDocument = htmlParser.parse (htmlAsString)
 afirma lo que quieras sobre htmlDocument

Mientras hace esto, describe el contrato de la vista. Puede usar esta información para verificar que el controlador coloca los datos correctos en las variables de plantilla de vista correctas sin tener que ejecutar el controlador y ver juntos.

2. No pruebe una biblioteca de etiquetas probando su aplicación. Si desea probar la biblioteca de etiquetas, pruébela de forma aislada. Esto también se aplica al aprendizaje sobre la biblioteca de etiquetas escribiendo Pruebas de aprendizaje para ella.

Cuando desee utilizar una biblioteca de etiquetas, piense en las características que desea usar y cómo espera que se comporten esas características. Probablemente pueda explorarlos más a fondo al no limitarse al contexto exacto en el que planea usar esa función de biblioteca de etiquetas en este momento. Probablemente aprenderá más que simplemente tratar de hacer que funcione la cosa actual que desea que funcione. Esto le ayuda a comprender mejor de qué parte del contrato de la biblioteca de etiquetas dependerá su aplicación. Encontrará esto útil, lo prometo.