Pest 5 Is Here
Nuno Maduro announced Pest v5 on stage at Laracon US 2026 in Boston and tagged v5.0.0 during the conference. The release ships a new TIA engine, five first-party plugins, eight new expectations, and bumps the baseline to PHP 8.4 and PHPUnit 13.
Test Impact Analysis With the TIA Engine
TIA (Test Impact Analysis) is the headline feature. On the first run Pest records which tests touch which files. Every subsequent run executes only the tests affected by your changes and replays cached results for everything else — without sacrificing coverage accuracy.
./vendor/bin/pest --parallel --tia
A typical summary looks like this:
Tests: 774 passed (2658 assertions, 7 affected, 2 uncached, 765 replayed)
Duration: 3.92s
The dependency graph goes beyond PHP files. Change a migration and Pest re-runs only tests that queried that table. Edit a Blade template and it re-runs the tests that rendered it. It understands Laravel, Symfony, Livewire, Inertia, and Vite module graphs automatically — nothing to configure.
Taylor Otwell reported that Laravel Cloud's suite of 19,000+ tests dropped from 3 minutes to 5 seconds after enabling TIA.
Note: TIA needs PCOV or Xdebug to record its baseline. Teams can have CI record the baseline once per merge to
mainand share it with everyone else.
Verifying AI Agent Changes With the Agent Plugin
The Agent plugin gives coding agents a way to confirm their changes actually work inside your real test suite:
composer require pestphp/pest-plugin-agent --dev
./vendor/bin/pest --agent='$user = \App\Models\User::factory()->create(); $this->actingAs($user)->get("/dashboard")->assertOk();'
Each snippet runs as an isolated test with factories, RefreshDatabase, and Laravel fakes available. This is designed for quick feedback during development, not as a replacement for committed regression tests.
Testing LLM Output With Evals
The Evals plugin scores LLM output quality through the familiar expect() API:
composer require pestphp/pest-plugin-evals --dev
it('answers capital city questions correctly', function (): void {
expect(CapitalCityAgent::class)
->prompt('What is the capital of France?')
->toContain('Paris') // deterministic check
->toBeRelevant() // LLM-as-judge scorer
->toBeSimilar('Paris, France'); // semantic similarity
});
Evals are skipped on a normal run and only execute when you pass --evals. Scored expectations accept a threshold between 0.0 and 1.0 (default 0.7). Available scorers include toBeRelevant(), toBeSafe(), toBeFactual(), toBeSimilar(), toPassJudge(), toHaveToolCalls(), and toFollowTrajectory().
PHPStan and Rector Plugins
PHPStan — The new first-party plugin teaches PHPStan about it(), test(), expect(), and $this inside test closures. Types flow through expectation chains, and it catches impossible expectations like expect(10)->toStartWith('1').
composer require pestphp/pest-plugin-phpstan --dev
Rector — Ships 60 rules that rewrite raw PHP assertions as Pest matchers and handle major version upgrades.
use Pest\Rector\Set\PestSetList;
return RectorConfig::configure()
->withPaths([__DIR__ . '/tests'])
->withSets([PestSetList::CODING_STYLE]);
New Expectations
Eight new matchers cover common format checks:
expect('nuno@pestphp.com')->toBeEmail();
expect('01ARZ3NDEKTSV4RRFFQ69G5FAV')->toBeUlid();
expect('192.168.1.1')->toBeIpAddress();
expect('00:1a:2b:3c:4d:5e')->toBeMacAddress();
Also available: toBeHostname(), toBeDomain(), toBeBase64(), and toBeHexadecimal().
Upgrading to Pest 5
Pest 5 requires PHP 8.4 and PHPUnit 13. For most suites the upgrade is a one-line change in composer.json:
"pestphp/pest": "^5.0"
The Pest team documents no API-level breaking changes beyond the version bumps. Review the PHPUnit 13 changelog for anything that may affect your suite.
Key Takeaways
- TIA engine runs only affected tests and replays the rest from cache, preserving coverage accuracy
- Agent plugin lets AI coding agents verify changes inside a real feature-test environment
- Evals plugin scores LLM output with deterministic and AI-powered checks via
expect() - PHPStan plugin adds full type inference for Pest's DSL — a long-requested community feature
- Rector plugin ships 60 rules for coding style and version upgrades
- PHP 8.4 and PHPUnit 13 are now required
Source: Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals — Laravel News