> laravel-testing
Write Pest feature tests with RefreshDatabase, mock external services, and create test data with Eloquent Factories in Laravel. Use when adding HTTP tests, configuring SQLite in-memory test database, or mocking payment services. (triggers: tests/**/*.php, phpunit.xml, feature, unit, mock, factory, sqlite)
curl "https://skillshub.wtf/HoangNguyen0403/agent-skills-standard/laravel-testing?format=md"Laravel Testing
Priority: P1 (HIGH)
Workflow: Test a New Feature
- Generate factory —
php artisan make:factory PostFactory --model=Post. - Write feature test — Use Pest with
RefreshDatabasefor isolation. - Mock externals — Use
$this->mock(Service::class)for third-party calls. - Assert response — Chain
assertStatus(),assertJson(),assertJsonStructure(). - Run with SQLite — Set
DB_CONNECTION=sqliteandDB_DATABASE=:memory:inphpunit.xml.
Pest Feature Test Example
See implementation examples for Pest feature tests and test directory structure.
Implementation Guidelines
Pest & Modern Testing
- Feature Tests: Use
uses(RefreshDatabase::class)at the top of Pest files. Example:it('creates post', fn() => $this->postJson('/api/posts', [...])verifies database rolled back after each test. - Transactions: For faster but non-truncating isolation, use
DatabaseTransactions.
Mocking & External Services
- Service Mocking: Use
$this->mock(PaymentService::class)withshouldReceive('charge')->once()->with(100)to assert interaction. - Loose Verification: Use
$this->spy()for behavior validation without strict ordering. - Network Safety: Never make real network calls in automated tests.
Test Data & Infrastructure
- Factories: Create test data via
Post::factory()->count(3)->create(['user_id' => $id]). - Definition: Implement
definition(): arrayusingfake()in factory classes. - Generation: Run
php artisan make:factory PostFactory --model=Post. - SQLite Support: In
phpunit.xml, setDB_CONNECTION' value='sqlite'andDB_DATABASE' value=':memory:'for in-memory, lightning-fast tests.
HTTP Assertions
- Fluent Assertions: Chain
assertStatus(201),assertJson(['data' => ...]), andassertJsonStructure. - Header Verification: Use
assertHeader('Content-Type', 'application/json').
Anti-Patterns
- No real network calls: Always mock or stub external services.
- No state leakage between tests: Use
RefreshDatabasetrait. - No
DB::table()->insert(): Never DB::table()->insert() raw data in tests — use Eloquent Factories instead. - No heavy computations in unit tests: Move to Feature layer.
References
> related_skills --same-repo
> common-store-changelog
Generate user-facing release notes for the Apple App Store and Google Play Store by collecting git history, triaging user-impacting changes, and drafting store-compliant changelogs. Enforces character limits (App Store ≤4000, Google Play ≤500), tone, and bullet format. Use when generating release notes, app store changelog, play store release, what's new, or version release notes for any mobile app. (triggers: generate changelog, app store notes, play store release, what's new, release notes, ve
> golang-tooling
Go developer toolchain — gopls LSP diagnostics, linting, formatting, and vet. Use when setting up Go tooling, running linters, or integrating gopls with Claude Code. (triggers: gopls, golangci-lint, golangci.yml, go vet, goimports, staticcheck, go tooling, go lint)
> common-ui-design
Design distinctive, production-grade frontend UI with bold aesthetic choices. Use when building web components, pages, interfaces, dashboards, or applications in any framework (React, Next.js, Angular, Vue, HTML/CSS). (triggers: build a page, create a component, design a dashboard, landing page, UI for, build a layout, make it look good, improve the design, build UI, create interface, design screen)
> common-owasp
OWASP Top 10 audit checklist for Web Applications (2021) and APIs (2023). Load during any security review, PR review, or codebase audit touching web, mobile backend, or API code. (triggers: security review, OWASP, broken access control, IDOR, BOLA, injection, broken auth, API review, authorization, access control)