Desarrollo Web 5-8 minutos

Pest 3: el testing elegante de PHP que Laravel usa por defecto

Diego Cortés
Diego Cortés
Full Stack Developer & SEO Specialist
Compartir:
Pest 3: el testing elegante de PHP que Laravel usa por defecto

Pest 3, lanzado en septiembre de 2024, es el framework de testing por defecto de Laravel desde la v11 y en 2026 suma browser testing con Playwright. Migrar desde PHPUnit suele ser un cambio de una línea: esta guía muestra cómo y cómo sacar partido del mutation y el arch testing.

Qué es Pest y por qué es el estándar en Laravel

Pest es un framework de testing para PHP construido sobre PHPUnit. No reemplaza el motor de pruebas: lo envuelve con una sintaxis más limpia y cercana al lenguaje humano, de modo que tus tests se leen como frases en lugar de como métodos con prefijos repetidos. Esa legibilidad, sumada a herramientas que PHPUnit no trae de serie, lo ha convertido en la elección por defecto del ecosistema Laravel desde la versión 11.

La sintaxis expresiva construida sobre PHPUnit

La clave de Pest es que cualquier test de PHPUnit sigue funcionando, pero puedes escribirlos de forma mucho más directa. En lugar de clases con métodos que empiezan por test, defines funciones con frases descriptivas y helpers como it, test o expect. El mismo test ocupa la mitad de líneas y se lee como una especificación, lo que reduce la fricción a la hora de escribir y mantener la suite. Pest 3 requiere PHP 8.2 o superior y está construido sobre PHPUnit 11, así que no pierdes nada de la potencia que ya conoces.

Adopción: de Laravel 11 a Laravel 13

La adopción no fue anecdótica: Pest es el framework de testing por defecto en Laravel desde la v11 y ya superaba los 18 millones de descargas cuando se anunció Pest 3 en Laracon US 2024. Desde entonces ha seguido creciendo, y hoy es habitual encontrarlo en proyectos Laravel 12 y 13 junto a PHPStan para el análisis estático y Pint para el formateo, formando el stack de calidad estándar del ecosistema.

Instalación y migración desde PHPUnit

Empezar desde cero es cuestión de dos comandos. Añades Pest como dependencia de desarrollo e inicializas la configuración:

composer require pestphp/pest --dev
./vendor/bin/pest --init

El comando init genera el archivo Pest.php con los usings necesarios y deja tu suite lista. Si ya tienes tests escritos con PHPUnit, no necesitas reescribirlos: Pest los ejecuta tal cual. Y si quieres convertir tu suite al nuevo estilo, el comando de upgrade lo hace por ti en un solo paso para la mayoría de los proyectos, actualizando la sintaxis de tus tests existentes de forma automática.

Mutation testing: encuentra el código sin testear

El mutation testing es una de las grandes bazas de Pest 3. La idea es simple pero poderosa: el framework modifica tu código fuente de forma controlada, introduciendo pequeños cambios (mutaciones) como invertir una condición o cambiar un operador, y ejecuta la suite contra cada versión mutada. Si tus tests detectan la mutación, el mutante muere y esa parte del código está bien cubierta; si los tests pasan igualmente, has encontrado código que en realidad no está siendo verificado. Ejecutarlo es tan fácil como añadir un flag:

./vendor/bin/pest --mutate

El informe resultante te dice qué mutantes sobrevivieron, es decir, exactamente qué líneas de tu código pueden romperse sin que tu suite se entere. Es la forma más directa de medir la calidad real de tus tests, más allá del porcentaje de cobertura tradicional.

Arch testing: reglas de arquitectura en tu suite

El arch testing convierte las convenciones de arquitectura en tests ejecutables. En lugar de confiar en la disciplina del equipo, escribes reglas que verifican, por ejemplo, que todos los controladores terminan en Controller o que los servicios no dependen directamente de Eloquent. Si alguien rompe la regla, la suite falla y el error señala exactamente qué archivo la viola.

Arch presets y tests arquitectónicos propios

Pest 3 incluye presets listos para usar, como el preset de Laravel, que aplican de un plumazo las convenciones más comunes del framework. Sobre ellos puedes añadir tus propias reglas con una sintaxis declarativa:

arch()->preset()->laravel();

arch('controllers')
    ->expect('App\\Http\\Controllers')
    ->toHaveSuffix('Controller');

Estas reglas se ejecutan como cualquier otro test y son ideales para mantener la arquitectura bajo control en equipos grandes, en proyectos longevos o cuando el código pasa por muchas manos.

Browser testing con Playwright

Los browser tests de Pest son tests de Pest normales en los que Playwright maneja un navegador real. Eso significa que puedes visitar páginas, rellenar formularios, hacer clic y comprobar el resultado en un navegador Chrome o Firefox real, manteniendo la misma sintaxis expresiva del resto de tu suite. Un ejemplo mínimo:

it('logs the user in', function () {
    $this->browse(function (Browser $browser) {
        $browser->visit('/login')
            ->type('email', 'diego@example.com')
            ->type('password', 'secret')
            ->press('Login')
            ->assertPathIs('/dashboard');
    });
});

La ventaja frente a los tests HTTP tradicionales es obvia: pruebas el JavaScript, las redirecciones y el comportamiento real de la interfaz, no solo la respuesta del servidor. Para aplicaciones Laravel con componentes Livewire o mucho frontend, este nivel de verificación es el que de verdad evita regresiones en producción.

AI evals y el motor Tia: testing para agentes

La web oficial de Pest lo presenta hoy como el framework de testing "para desarrolladores y agentes de IA", y no es marketing vacío. La suite incluye AI evals para evaluar respuestas de modelos y un agent browser que verifica el trabajo de los agentes de código, además del motor Tia, pensado para ejecuciones casi instantáneas. El lanzamiento se describe como el mayor release de Pest hasta la fecha, con un upgrade de una línea para la mayoría de las suites. Si trabajas con agentes que generan o modifican código, tener un framework que los ponga a prueba es un salto cualitativo.

Ejemplo práctico: una suite completa en minutos

Para verlo todo junto, imagina un proyecto Laravel nuevo. Tras instalar Pest, escribes un test unitario para una clase de dominio, un test de feature que verifica una ruta autenticada, una regla de arch testing y un browser test. Todo convive en la misma suite, se ejecuta con un solo comando y se lee como una especificación del comportamiento esperado. El flujo de calidad queda completo añadiendo PHPStan para el análisis estático y Pint para el estilo, y puedes integrar la ejecución de Pest en tu pipeline de CI para que cada pull request verifique tests, mutaciones y arquitectura de forma automática.

Conclusión

Pest 3 ha convertido el testing en PHP en una experiencia mucho más agradable, y lo ha hecho sin reinventar la rueda: corre sobre PHPUnit, migra en una línea y añade mutation testing, arch testing y browser tests con Playwright que cubren lo que la cobertura tradicional no ve. Si trabajas con Laravel, es el estándar que el ecosistema ya ha elegido. Para completar tu stack de calidad, echa un vistazo a nuestra guía sobre SQLite en producción con Laravel y al repaso de PHP 8.5, nueve meses después.

Categorías