Agent SkillsWINBIGFOX/TimeScribe › pest-testing

pest-testing

GitHub

用于 Laravel 项目中 Pest PHP 测试的编写、编辑、修复及重构。涵盖断言、数据集、浏览器测试、架构测试等,指导用户遵循最佳实践并正确使用 Pest 4 特性。

.agents/skills/pest-testing/SKILL.md WINBIGFOX/TimeScribe

Trigger Scenarios

编写或编辑 Laravel 测试文件 修复因代码变更导致的测试失败 将 PHPUnit 测试转换为 Pest 进行浏览器测试或冒烟测试 询问如何编写 Pest 测试

Install

npx skills add WINBIGFOX/TimeScribe --skill pest-testing -g -y
More Options

Non-standard path

npx skills add https://github.com/WINBIGFOX/TimeScribe/tree/main/.agents/skills/pest-testing -g -y

Use without installing

npx skills use WINBIGFOX/TimeScribe@pest-testing

指定 Agent (Claude Code)

npx skills add WINBIGFOX/TimeScribe --skill pest-testing -a claude-code -g -y

安装 repo 全部 skill

npx skills add WINBIGFOX/TimeScribe --all -g -y

预览 repo 内 skill

npx skills add WINBIGFOX/TimeScribe --list

SKILL.md

Frontmatter
{
    "name": "pest-testing",
    "license": "MIT",
    "metadata": {
        "author": "laravel"
    },
    "description": "Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests\/Feature, tests\/Unit, tests\/Browser), or needs browser testing, smoke testing multiple pages for JS errors, or architecture tests. Covers: test()\/it()\/expect() syntax, datasets, mocking, browser testing (visit\/click\/fill), smoke testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 4 features. Do not use for factories, seeders, migrations, controllers, models, or non-test PHP code."
}

Pest Testing 4

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}.

The {name} argument should include only the path and test name, but should not include the test suite.

  • Incorrect: php artisan make:test --pest Feature/SomeFeatureTest will generate tests/Feature/Feature/SomeFeatureTest.php
  • Correct: php artisan make:test --pest SomeControllerTest will generate tests/Feature/SomeControllerTest.php
  • Incorrect: php artisan make:test --pest --unit Unit/SomeServiceTest will generate tests/Unit/Unit/SomeServiceTest.php
  • Correct: php artisan make:test --pest --unit SomeServiceTest will generate tests/Unit/SomeServiceTest.php

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

Pest supports both test() and it() functions. Before writing new tests, check existing test files in the same directory to match the project's convention. Use test() if existing tests use test(), or it() if they use it().

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
  • Prefixing Feature/ or Unit/ in {name} when using make:test

Version History

  • 6d44d8a Current 2026-08-20 09:14

Same Skill Collection

.agents/skills/inertia-vue-development/SKILL.md
.agents/skills/laravel-pdf/SKILL.md
.agents/skills/laravel-app-translations/SKILL.md
.agents/skills/laravel-best-practices/SKILL.md
.agents/skills/tailwindcss-development/SKILL.md

Metadata

Files
0
Version
6d44d8a
Hash
3fd1c282
Indexed
2026-08-20 09:14

Home - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-09-01 09:29
浙ICP备14020137号-1 $Map of visitor$