Claude-skill-registry laravel-testing
Write tests with Pest 3/PHPUnit, feature tests, unit tests, mocking, fakes, and factories. Use when testing controllers, services, models, or implementing TDD.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/laravel-testing" ~/.claude/skills/majiayu000-claude-skill-registry-laravel-testing && rm -rf "$T"
manifest:
skills/data/laravel-testing/SKILL.mdsource content
Laravel Testing
Agent Workflow (MANDATORY)
Before ANY implementation, launch in parallel:
- fuse-ai-pilot:explore-codebase - Analyze existing test patterns
- fuse-ai-pilot:research-expert - Verify Pest/PHPUnit docs via Context7
- mcp__context7__query-docs - Check assertion and mocking patterns
After implementation, run fuse-ai-pilot:sniper for validation.
Overview
| Type | Purpose | Location |
|---|---|---|
| Feature | HTTP, full stack | |
| Unit | Isolated classes | |
| Arch | Code architecture | |
Decision Guide: Test Type
What to test? ├── HTTP endpoint → Feature test ├── Service/Policy logic → Unit test ├── Code structure → Arch test ├── External API → Mock with Http::fake() ├── Mail/Queue/Event → Use Fakes └── Database state → assertDatabaseHas()
Decision Guide: Test Strategy
Coverage strategy? ├── Feature tests (70%) → Critical flows ├── Unit tests (25%) → Business logic ├── E2E tests (5%) → User journeys └── Arch tests → Structural rules
Critical Rules
- Use RefreshDatabase for database isolation
- Use factories for test data (never raw inserts)
- Mock external services - Never call real APIs
- Test edge cases - Empty, null, boundaries
- Run parallel -
for speedpest --parallel
Reference Guide
Pest Basics
| Topic | Reference | When to Consult |
|---|---|---|
| Pest Syntax | pest-basics.md | it(), test(), describe() |
| Datasets | pest-datasets.md | Data providers, hooks |
| Architecture | pest-arch.md | arch() tests |
HTTP Testing
| Topic | Reference | When to Consult |
|---|---|---|
| Requests | http-requests.md | GET, POST, headers |
| JSON API | http-json.md | API assertions |
| Authentication | http-auth.md | actingAs, guards |
| Assertions | http-assertions.md | Status, redirects |
Database Testing
| Topic | Reference | When to Consult |
|---|---|---|
| Basics | database-basics.md | RefreshDatabase |
| Factories | database-factories.md | Factory patterns |
| Assertions | database-assertions.md | DB assertions |
Mocking
| Topic | Reference | When to Consult |
|---|---|---|
| Services | mocking-services.md | Mock, spy |
| Fakes | mocking-fakes.md | Mail, Queue, Event |
| HTTP & Time | mocking-http.md | Http::fake, travel |
Other
| Topic | Reference | When to Consult |
|---|---|---|
| Console | console-tests.md | Artisan tests |
| Troubleshooting | troubleshooting.md | Common errors |
Templates
| Template | When to Use |
|---|---|
| FeatureTest.php.md | HTTP feature test |
| UnitTest.php.md | Service unit test |
| ArchTest.php.md | Architecture test |
| ApiTest.php.md | REST API test |
| PestConfig.php.md | Pest configuration |
Quick Reference
// Feature test it('creates a post', function () { $user = User::factory()->create(); $this->actingAs($user) ->postJson('/api/posts', ['title' => 'Test']) ->assertCreated() ->assertJsonPath('data.title', 'Test'); $this->assertDatabaseHas('posts', ['title' => 'Test']); }); // With dataset it('validates emails', function (string $email, bool $valid) { // test logic })->with([ ['valid@test.com', true], ['invalid', false], ]); // Mock facade Mail::fake(); // ... action ... Mail::assertSent(OrderShipped::class);
Commands
# Run all tests php artisan test # Pest directly ./vendor/bin/pest # Parallel execution ./vendor/bin/pest --parallel # Filter by name ./vendor/bin/pest --filter "user can" # Coverage ./vendor/bin/pest --coverage --min=80 # Profile slow tests ./vendor/bin/pest --profile
Best Practices
DO
- Use
traitRefreshDatabase - Follow AAA pattern (Arrange-Act-Assert)
- Name tests descriptively
- Test one thing per test
- Use factories for data
DON'T
- Create test dependencies
- Call real external APIs
- Use production database
- Skip edge cases