Midiendo el type coverage con PEST en Laravel

Midiendo el type coverage con PEST en Laravel

Una de mis obsesiones últimamente cuando utilizo PHP es tipar el código al máximo posible. Utilizar DTOs o Value Objects y no arrays, y tipar los parámetros de funciones y atributos de una clase es un gustazo a la hora de trabajar con un IDE. Además, cuando construyes aplicaciones complejas hace que todo el trabajo sea más cómodo y seguro.

En uno de nuestros proyectos, Codex, estamos usando tests en todo el codebase con PestPHP, una alternativa a PHPUnit que me gusta mucho. Una de las opciones que tiene, es que puedes medir el type coverage de tu aplicación. Es decir, qué porcentaje de tu código está tipado.

En primer lugar, tenemos que instalar Pest y su extensión para el type coverage:

Para instalar Pest:

composer require pestphp/pest --dev --with-all-dependencies

./vendor/bin/pest --init

Para instalar el plugin:

composer require pestphp/pest-plugin-type-coverage --dev

Una vez instalado todo, podemos medir el type coverage de nuestro código sin escribir ni un solo test a través del siguiente comando:

./vendor/bin/pest --type-coverage

Esto nos dará un output tal que así:

Una captura del type coverage de CodexAtlas

Además, configurando esto como un paso en nuestro pipeline, podemos requerir un mínimo para nuestro type coverage, y así asegurarnos de que cualquier actualización de código tenga que estar tipado al máximo posible:

./vendor/bin/pest --type-coverage --min=100

En caso de no pasar el type coverage, obtendríamos algo así:

Esto, al ejecutarse, devolverá un código de respuesta distinto de cero, que será interpretado por las líneas de comando como un error y no permitirá pasar el pipeline.