Cómo realizar tests unitarios a un PDF generado

realizar tests unitarios

Ya hemos hablado de lo importante de tener test unitarios en nuestras aplicaciones, si lo has hecho es muy probable que alguna vez te hayas encontrado con la necesidad de Cómo realizar tests unitarios a un PDF generado y conocer si se ha generado correctamente. El problema que se nos plantea es que la respuesta que nos devuelve el backend viene renderizada, por lo que no podremos hacerles los típicos assertionspara comprobar que contienen el texto que esperábamos.

Probando la respuesta

En cambio, sí que podemos probar que el response venga con un status 200 y además, que los headers sean los correctos y que la disposición del PDF es la que deseamos (attachment, inline, nombre del fichero, etc…)

De esta forma sabremos que se está mostrando un PDF si el header content_type tiene el valor de application/pdf, del mismo modo, consultaremos el header content-dispositionpara comprobar si el fichero viene como attachmento si por el contrario se está mostrando inline. En el mismo header podremos también ver el nombre del fichero. En nuestro caso filename="orders_report.pdf

Probando el contenido

Ahora viene donde se complica la cosa. Como hemos visto, el contenido del response no es texto, así que no podremos hacer assertions. Vamos a necesitar una herramienta intermedia que nos convierta el PDF a texto. Aquí es donde entra Apache PDFBox, una aplicación de linea de comandos escrita en Java que precisamente se encarga de hacer este trabajo sucio.

Descarga la última version y copiala en la base de tu proyecto. Asegurate también que tengas Java configurado en tu sistema para que se pueda ejecutar.

Como wrapper para nuestros tests vamos a utilizar schmengler/PdfBox, una librería escrita en PHP que interactuará con PDFBox. Podemos instalarla via composer.

Ya solo nos queda decirle a nuestro test dónde tenemos el ejecutable de PDFBox y qué archivo PDF vamos a convertir. El resto ya lo conoces, hacerle assertions al texto convertido.

Un test completo real lifepodría quedar tal que así:

Si tienes alguna duda puedes dejar un comentario o pasarte por nuestro Slack 😉

Comparte este artículo

Entra en la discusión y deja tu comentario

Veces