Nuno Maduro anunció Pest 5 en el escenario de la Laracon US 2026 en Boston y etiquetó v5.0.0 durante la conferencia. La nueva versión mayor del framework de testing de PHP requiere PHP 8.4 y funciona sobre PHPUnit 13.
La característica principal es el motor Tia (Test Impact Analysis). En la primera ejecución registra qué tests tocan qué archivos; después, `./vendor/bin/pest --parallel --tia` ejecuta solo los tests afectados por tus cambios y reproduce el resto desde la caché. La suite de más de 19.000 tests de Laravel Cloud pasó, según se informa, de 3 minutos a 5 segundos. Los resultados en caché conservan la cobertura completa de líneas y ramas, así que los informes `--coverage` y los umbrales `--min` se comportan como si toda la suite se hubiera ejecutado. El grafo de dependencias va más allá de PHP: cambiar una migración solo reejecuta los tests que consultaron esa tabla, editar un componente JS compartido sigue el grafo de módulos de Vite hasta las páginas Inertia afectadas, y tocar una plantilla Blade reejecuta los tests que la renderizaron. Laravel, Symfony, Livewire, Inertia y los assets del navegador se detectan automáticamente vía Composer. Los archivos se normalizan antes del hash (sin espacios, comentarios ni docblocks), de modo que un pase de Pint no dispara reejecuciones. Grabar la baseline requiere PCOV o Xdebug; la CI puede registrarla una vez por merge a main, aunque compartirla exige una GitHub CLI autenticada y solo funciona en GitHub. El comportamiento se configura en tests/Pest.php mediante `pest()->tia()` con métodos como `always()`, `locally()`, `baselined()` y `filtered()`.
El plugin Agent (pestphp/pest-plugin-agent) permite a los agentes de codificación con IA verificar sus cambios. La opción `--agent` ejecuta un fragmento como un test aislado llamado "verify", con factories, RefreshDatabase y fakes de Laravel disponibles; por ejemplo, crear un usuario y comprobar que una petición al dashboard devuelve OK. Con el plugin de testing de navegador instalado, las sondas pueden controlar un navegador real y verificar efectos secundarios en el backend. Está pensado como feedback rápido, no como sustituto de los tests de regresión confirmados.
El plugin Evals (pestphp/pest-plugin-evals) aborda la salida no determinista de los LLM puntuando la calidad en lugar de afirmar igualdad, usando la conocida API expect(). Las evals llaman a modelos reales, por lo que se omiten en ejecuciones normales y solo se ejecutan con `--evals`. Las expectations deterministas como toContain(), toMatch(), toBe() y toBeJson() no necesitan driver. Las puntuadas aceptan un umbral de 0.0 a 1.0 (0.7 por defecto): toBeRelevant(), toBeSafe(), toBeFactual(), toBeSimilar() y toPassJudge() para criterios en lenguaje natural, además de toHaveToolCalls() y toFollowTrajectory() para el uso de herramientas por agentes, repeat() para muestreo repetido y toPassScorer() para scorers propios. La puntuación usa Laravel AI por defecto, con drivers de juez y embeddings intercambiables mediante closures o clases personalizadas.
El soporte oficial de PHPStan (pestphp/pest-plugin-phpstan) era muy solicitado. El plugin lee Pest.php para determinar qué es $this dentro de los closures de test, admite los estilos uses(TestCase::class)->in(...) y pest()->extend(...), y se autorregistra con phpstan/extension-installer. Los tipos fluyen por las cadenas de expectations, toBeInt() estrecha uniones, las propiedades asignadas en beforeEach() quedan tipadas y las expectations imposibles como expect(10)->toStartWith('1') se señalan. Reglas adicionales cubren closures estáticos, $this en beforeAll(), descripciones duplicadas y referencias throws()/covers() inválidas, con identificadores estables como pest.expectation.impossible.
El plugin Rector (pestphp/pest-plugin-rector) incluye 60 reglas divididas en sets de estilo y de actualización de versión. El set de estilo reescribe aserciones PHP en bruto como matchers (por ejemplo, combinando count y comprobación de clave en toHaveCount(5)->toHaveKey('id')), convierte aserciones de PHPUnit a expect() y transforma tests de excepciones con try/catch en toThrow(). Los sets de actualización bajo PestLevelSetList son acumulativos; vista previa con --dry-run.
El sharding equilibrado por tiempo, introducido en Pest v4.6.0, distribuye los shards de CI según el tiempo de ejecución registrado en lugar del número de archivos: graba los tiempos con --update-shards, confirma tests/.pest/shards.json, y --shard=1/4 los usa automáticamente.
Ocho nuevas expectations cubren comprobaciones de formato tediosas: toBeEmail(), toBeUlid(), toBeIpAddress(), toBeMacAddress(), toBeHostname(), toBeDomain(), toBeBase64() y toBeHexadecimal(), cada una con mensaje de fallo personalizado opcional y negación mediante not.
La actualización consiste en subir pestphp/pest y los plugins de Pest a ^5.0 en composer.json. La guía estima unos dos minutos, sin cambios de API más allá de los saltos de versión; la mayor fricción vendrá del propio PHPUnit 13.
Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
Esperando tu clic …
·