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í:
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.