mcpField
P
pest-testing

pest-testing

github.com/spatieTesting & quality648719 installsUpdated 3d ago
Repository

About pest-testing

Pest Testing 4 is a testing skill for Laravel projects using Pest 4, intended for developers creating, modifying, or debugging tests. It covers unit, feature, browser, smoke, visual regression, sharding, and architecture testing practices.

Key features

  1. 01Guide Pest test creation and organization
  2. 02Provide test commands and assertion guidance
  3. 03Cover browser and smoke testing
  4. 04Address visual regression and test sharding
  5. 05Include architecture testing practices

Use cases

  1. 01Write tests for Laravel features
  2. 02Debug failing tests or modify existing ones
  3. 03Validate browser pages and interactions
  4. 04Run tests in shards or check architecture rules

Install

Copy the command and run it in a terminal.

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

After installing, type/pest-testingin Claude Code to confirm it loaded.

Details

From the project README

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(); });

UseInstead 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' => '[email protected]', 'taylor' => '[email protected]', ]);

Pest 4 Features

FeaturePurpose
Browser TestingFull integration tests in real browsers
Smoke TestingValidate multiple pages quickly
Visual RegressionCompare screenshots for visual changes
Test ShardingParallel CI runs
Architecture TestingEnforce 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', '[email protected]')
    ->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

Comments

Markdown supported