Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" name: pest-testing description: "Tests applications using the Pest 3 PHP framework. Activates when writing tests, creating unit or feature tests, adding assertions, testing Livewire components, architecture testing, debugging test failures, working with datasets or mocking; or when the user mentions test, spec, TDD, expects, assertion, coverage, or needs to verify functionality works." license: MIT metadata: author: laravel
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 search-docs 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
tests/Featureandtests/Unitdirectories. - Do NOT remove tests without approval - these are core application code.
- Test happy paths, failure paths, and edge cases.
Basic Test Structure
<!-- Basic Pest Test Example -->
it('is true', function () {expect(true)->toBeTrue();});
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 (assertSuccessful(), assertNotFound()) instead of assertStatus():
<!-- Pest Response Assertion -->
it('returns all', function () {$this->postJson('/api/docs', [])->assertSuccessful();});
| Use | Instead of | |
|---|---|---|
assertSuccessful() | assertStatus(200) | |
assertNotFound() | assertStatus(404) | |
assertForbidden() | assertStatus(403) |
Mocking
Import mock function before use: use function Pest\Laravel\mock;
Datasets
Use datasets for repetitive tests (validation rules, etc.):
<!-- Pest Dataset Example -->
it('has emails', function (string $email) {expect($email)->not->toBeEmpty();})->with(['james' => 'james@laravel.com','taylor' => 'taylor@laravel.com',]);
Pest 3 Features
Architecture Testing
Pest 3 includes architecture testing to enforce code conventions:
<!-- Architecture Test Example -->
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();
Type Coverage
Pest 3 provides improved type coverage analysis. Run with --type-coverage flag.
Common Pitfalls
- Not importing
use function Pest\Laravel\mock;before using mock - Using
assertStatus(200)instead ofassertSuccessful() - Forgetting datasets for repetitive validation tests
- Deleting tests without approval