pest-testing

spatie/freek.dev · updated Apr 8, 2026

$npx skills add https://github.com/spatie/freek.dev --skill pest-testing
0 commentsdiscussion
summary

Activate this skill when:

skill.md

Pest Testing 4

When to Apply

Activate this skill when:

  • Creating new tests (unit, feature, or browser)
  • Modifying existing tests
  • Debugging test failures
  • Working with browser testing or smoke testing
  • Writing architecture tests or visual regression tests

Documentation

Use search-docs for detailed Pest 4 patterns and documentation.

Basic Usage

Creating Tests

All tests must be written using Pest. Use php artisan make:test --pest {name}.

Test Organization

  • Unit/Feature tests: tests/Feature and tests/Unit directories.
  • Browser tests: tests/Browser/ directory.
  • Do NOT remove tests without approval - these are core application code.

Basic Test Structure

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():

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.):

it('has emails', function (string $email) { expect($email)->not->toBeEmpty(); })->with([ 'james' => 'james@laravel.com', 'taylor' => 'taylor@laravel.com', ]);

Pest 4 Features

Feature Purpose
Browser Testing Full integration tests in real browsers
Smoke Testing Validate multiple pages quickly
Visual Regression Compare screenshots for visual changes
Test Sharding Parallel CI runs
Architecture Testing Enforce code conventions

Browser Test Example

Browser tests run in real browsers for full integration testing:

  • Browser tests live in tests/Browser/.
  • Use Laravel features like Event::fake(), assertAuthenticated(), and model factories.
  • Use RefreshDatabase for clean state per test.
  • Interact with page: click, type, scroll, select, submit, drag-and-drop, touch gestures.
  • Test on multiple browsers (Chrome, Firefox, Safari) if requested.
  • Test on different devices/viewports (iPhone 14 Pro, tablets) if requested.
  • Switch color schemes (light/dark mode) when appropriate.
  • Take screenshots or pause tests for debugging.

it('may reset the password', function () { Notification::fake();

$this->actingAs(User::factory()->create());

$page = visit('/sign-in');

$page->assertSee('Sign In')
    ->assertNoJavascriptErrors()
    ->click('Forgot Password?')
    ->fill('email', 'nuno@laravel.com')
    ->click('Send Reset Link')
    ->assertSee('We have emailed your password reset link!');

Notification::assertSent(ResetPassword::class);

});

Smoke Testing

Quickly validate multiple pages have no JavaScript errors:

$pages = visit(['/', '/about', '/contact']);

$pages->assertNoJavascriptErrors()->assertNoConsoleLogs();

Visual Regression Testing

Capture and compare screenshots to detect visual changes.

Test Sharding

Split tests across parallel processes for faster CI runs.

Architecture Testing

Pest 4 includes architecture testing (from Pest 3):

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

Common Pitfalls

  • Not importing use function Pest\Laravel\mock; before using mock
  • Using assertStatus(200) instead of assertSuccessful()
  • Forgetting datasets for repetitive validation tests
  • Deleting tests without approval
  • Forgetting assertNoJavascriptErrors() in browser tests

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.645 reviews
  • Sophia Sharma· Dec 24, 2024

    Keeps context tight: pest-testing is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Omar Diallo· Dec 16, 2024

    pest-testing is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • Daniel Tandon· Dec 12, 2024

    Registry listing for pest-testing matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Shikha Mishra· Dec 4, 2024

    pest-testing has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • Kofi Farah· Dec 4, 2024

    Useful defaults in pest-testing — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Rahul Santra· Nov 23, 2024

    pest-testing reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Min White· Nov 15, 2024

    pest-testing is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • Xiao Thomas· Nov 11, 2024

    Registry listing for pest-testing matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Aarav Mehta· Nov 7, 2024

    Keeps context tight: pest-testing is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Aanya Bhatia· Oct 26, 2024

    I recommend pest-testing for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

showing 1-10 of 45

1 / 5