/laravel-testing
Use when testing controllers, services, or models, or implementing TDD on Laravel 13 with Pest 4 / PHPUnit 12.
$ npx -y skills add fusengine/agents --skill laravel-testing --agent claude-codeHow 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
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.mdname: 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
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
Showing the first part of this file.
A plugin ecosystem that turns Claude Code into a supervised, multi-agent development environment.
Repo: fusengine/agents
Other skills on fusengine-agents.
- /agent-creator
Use when creating expert agents. Generates agent.md with frontmatter, hooks, required sections, and skill references.
Open skill - /apex-methodology
Use when starting ANY development task -- feature, bug fix, refactor, hotfix (triggers: implement, create, build, fix, add feature, refactor, develop).
Open skill - /brainstorming
Use when creating a feature/component or adding functionality. Fires BEFORE APEX Analyze to refine requirements via structured questioning.
Open skill - /challenge
Use before a root-cause, done/verified claim, irreversible action, or 2nd-time fix reaches the owner (APEX or plain conversation); also fires at every eLicit/Verify gate. Not for code correctness (use sniper).
Open skill - /code-quality
Use when validating code quality after modifications -- SOLID compliance, DRY duplication, linter errors, architecture violations. Do NOT use for functional verification (run verification FIRST, then code-quality).
Open skill - /elicitation
Use when an expert agent self-reviews and self-corrects code after the Execute phase, before sniper validation (BMAD-METHOD elicitation techniques).
Open skill

