Pest Testing 3
When to Apply
Activate this skill when:
- Creating new tests (unit or feature)
- Modifying existing tests
- Debugging test failures
- Working with datasets, mocking, or test organization
- Writing architecture tests
Documentation
Use
for detailed Pest 3 patterns and documentation.
Basic Usage
Creating Tests
All tests must be written using Pest. Use
php artisan make:test --pest {name}
.
Test Organization
- Tests live in the and directories.
- Do NOT remove tests without approval - these are core application code.
- Test happy paths, failure paths, and edge cases.
Basic Test Structure
<code-snippet name="Basic Pest Test Example" lang="php">
it('is true', function () {
expect(true)->toBeTrue();
});
</code-snippet>
Running Tests
- Run minimal tests with filter before finalizing:
php artisan test --compact --filter=testName
.
- Run all tests:
php artisan test --compact
.
- Run file:
php artisan test --compact tests/Feature/ExampleTest.php
.
Assertions
Use specific assertions (
,
) instead of
:
<code-snippet name="Pest Response Assertion" lang="php">
it('returns all', function () {
$this->postJson('/api/docs', [])->assertSuccessful();
});
</code-snippet>
Mocking
Import mock function before use:
use function Pest\Laravel\mock;
Datasets
Use datasets for repetitive tests (validation rules, etc.):
<code-snippet name="Pest Dataset Example" lang="php">
it('has emails', function (string $email) {
expect($email)->not->toBeEmpty();
})->with([
'james' => 'james@laravel.com',
'taylor' => 'taylor@laravel.com',
]);
</code-snippet>
Pest 3 Features
Architecture Testing
Pest 3 includes architecture testing to enforce code conventions:
<code-snippet name="Architecture Test Example" lang="php">
arch('controllers')
->expect('App\Http\Controllers')
->toExtendNothing()
->toHaveSuffix('Controller');
arch('models')
->expect('App\Models')
->toExtend('Illuminate\Database\Eloquent\Model');
arch('no debugging')
->expect(['dd', 'dump', 'ray'])
->not->toBeUsed();
</code-snippet>
Type Coverage
Pest 3 provides improved type coverage analysis. Run with
flag.
Common Pitfalls
- Not importing
use function Pest\Laravel\mock;
before using mock
- Using instead of
- Forgetting datasets for repetitive validation tests
- Deleting tests without approval