Skip to content

/laravel-testing

Use when testing controllers, services, or models, or implementing TDD on Laravel 13 with Pest 4 / PHPUnit 12.

shell
$ npx -y skills add fusengine/agents --skill laravel-testing --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/laravel-testing
How auto-invocation works

Context preview

The summary Claude sees to decide when to auto-load this skill.

Use when testing controllers, services, or models, or implementing TDD on Laravel 13 with Pest 4 / PHPUnit 12.

SKILL.md

laravel-testing.SKILL.md
name: laravel-testing
description: Use when testing controllers, services, or models, or implementing TDD on Laravel 13 with Pest 4 / PHPUnit 12.
versions:
  laravel: "13.0"
  pest: "4.0"
  phpunit: "12.0"
  php: "8.3"
user-invocable: false
references: references/pest-basics.md, references/pest-datasets.md, references/pest-arch.md, references/http-requests.md, references/http-json.md, references/http-auth.md, references/http-assertions.md, references/database-basics.md, references/database-factories.md, references/database-assertions.md, references/mocking-services.md, references/mocking-fakes.md, references/mocking-http.md, references/console-tests.md, references/troubleshooting.md, references/templates/FeatureTest.php.md, references/templates/UnitTest.php.md, references/templates/ArchTest.php.md, references/templates/ApiTest.php.md, references/templates/PestConfig.php.md
related-skills: laravel-architecture, laravel-eloquent

<objective> Covers Laravel 13 testing with Pest 4 and PHPUnit 12: feature tests (HTTP, full stack), unit tests (isolated classes), and architecture tests; Pest syntax (it/test/describe), datasets; HTTP testing (requests, JSON assertions, auth/actingAs, status/redirect assertions); database testing (RefreshDatabase, factories, DB assertions); mocking (services, spies, Mail/Queue/Event fakes, Http::fake, time travel); console/Artisan command tests; and PHPUnit-attribute-based seeding (#[Seed], #[Seeder]). </objective>

Laravel Testing

Agent Workflow (MANDATORY)

Before ANY implementation, use `TeamCreate` to spawn 3 agents:

1. **fuse-ai-pilot:explore-codebase** - Analyze existing test patterns 2. **fuse-ai-pilot:research-expert** - Verify Pest/PHPUnit docs via Context7 3. **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 | `tests/Feature/` | | **Unit** | Isolated classes | `tests/Unit/` | | **Arch** | Code architecture | `tests/Arch.php` |

---

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

1. **Use RefreshDatabase** for database isolation 2. **Use factories** for test data (never raw inserts) 3. **Mock external services** - Never call real APIs 4. **Test edge cases** - Empty, null, boundaries 5. **Run parallel** - `pest --parallel` for speed

---

Reference Guide

Pest Basics

| Topic | Reference | When to Consult | |-------|-----------|-----------------| | **Pest Syntax** | [pest-basics.md](references/pest-basics.md) | it(), test(), describe() | | **Datasets** | [pest-datasets.md](references/pest-datasets.md) | Data providers, hooks | | **Architecture** | [pest-arch.md](references/pest-arch.md) | arch() tests |

HTTP Testing

| Topic | Reference | When to Consult | |-------|-----------|-----------------| | **Requests** | [http-requests.md](references/http-requests.md) | GET, POST, headers | | **JSON API** | [http-json.md](references/http-json.md) | API assertions | | **Authentication** | [http-auth.md](references/http-auth.md) | actingAs, guards | | **Assertions** | [http-assertions.md](references/http-assertions.md) | Status, redirects |

Database Testing

| Topic | Reference | When to Consult | |-------|-----------|-----------------| | **Basics** | [database-basics.md](references/database-basics.md) | RefreshDatabase | | **Factories** | [database-factories.md](references/database-factories.md) | Factory patterns | | **Assertions** | [database-assertions.md](references/database-assertions.md) | DB assertions |

Mocking

| Topic | Reference | When to Consult | |-------|-----------|-----------------| | **Services** | [mocking-services.md](references/mocking-services.md) | Mock, spy | | **Fakes** | [mocking-fakes.md](references/mocking-fakes.md) | Mail, Queue, Event | | **HTTP & Time** | [mocking-http.md](references/mocking-http.md) | Http::fake, travel |

Other

| Topic | Reference | When to Consult | |-------|-----------|-----------------| | **Console** | [console-tests.md](references/console-tests.md) | Artisan tests | | **Troubleshooting** | [troubleshooting.md](references/troubleshooting.md) | Common errors |

Templates

| Template | When to Use | |----------|-------------| | [FeatureTest.php.md](references/templates/FeatureTest.php.md) | HTTP feature test | | [UnitTest.php.md](references/templates/UnitTest.php.md) | Service unit test | | [ArchTest.php.md](references/templates/ArchTest.php.md) | Architecture test | | [ApiTest.php.md](references/templates/ApiTest.php.md) | REST API test | | [PestConfig.php.md](references/templates/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
Read more
Read it on GitHub ↗

Showing the first part of this file.

Ships withfusengine-agents

A plugin ecosystem that turns Claude Code into a supervised, multi-agent development environment.

Get the whole plugin, auto-invoked
Stats
22
Stars
0
Views
3
Forks
Active
Maintenance
CSS
Language
MIT
License
1d ago
Last commit
6mo ago
Created

Repo: fusengine/agents