К основному содержанию
скилл CX Codex

laravel-testing — скилл для Claude Code: что делает и как установить

Скилл учит ассистента писать тесты для Laravel 13 на Pest 4 или PHPUnit 12 с учётом фабрик моделей и моков сервисов.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add AsyrafHussin/agent-skills --skill laravel-testing -a claude-code
Открыть на GitHub

Что делает laravel-testing

Скилл содержит 24 правила тестирования приложений на Laravel 13 и требует окружения PHP 8.3+. Перед генерацией кода помощник проверяет composer.json и наличие файла tests/Pest.php. Если в проекте подключён pestphp/pest, агент выбирает синтаксис Pest, а если найден только phpunit/phpunit — генерирует стандартные классы PHPUnit 12. При наличии обеих библиотек приоритет отдаётся Pest.

Внутри собраны шаблоны для сквозных HTTP-тестов, типизированных фабрик моделей и аутентификации через Sanctum. Для изоляции внешних вызовов скилл задаёт правила работы с фейками почты, очередей, а также ИИ-инструментов Laravel 13: Agent::fake() и Embeddings::fake(). Если фреймворк определить не удаётся, агент прямо спросит разработчика о выборе синтаксиса перед составлением тестов.

Какие задачи решает

  • написать HTTP-тесты для API с проверкой статус-кодов и структуры JSON
  • настроить фабрики моделей со связями, последовательностями и состояниями
  • проверить состояние базы данных через assertDatabaseHas или мягкое удаление
  • изолировать очереди, почтовые отправки и вызовы ИИ-агентов через фейки
  • протестировать эндпоинты с авторизацией через токены Sanctum

Примеры запросов агенту

  • Напиши feature-тест для эндпоинта /api/posts с авторизацией через Sanctum
  • Сделай фабрику для модели Invoice с состояниями оплаченного и отменённого счёта
  • Проверь отправку фонового уведомления при регистрации нового пользователя

Как установить laravel-testing

1Через Skills CLI (Vercel)

npx skills add AsyrafHussin/agent-skills --skill laravel-testing -a claude-code

2Вручную: положить файлы

~/.claude/skills/laravel-testing/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/laravel-testing/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора12

laravel-inertia-react Скилл с готовыми правилами для страниц Inertia, форм на useForm и общих данных в связке Laravel и React. CX Codex +1 1 900установок clean-code-principles Скилл для ревью архитектуры и качества кода: SOLID, DRY, KISS, паттерны проектирования. Пригодится при рефакторинге и обсуждении решений по дизайну. CX Codex +1 1 800установок typescript-react-patterns Скилл с 33 правилами типизации React на TypeScript: пропсы, хуки, события, refs, дженерики и контекст. Пригодится, когда агент пишет компоненты и лезет в типы. CX Codex +1 1 100установок api-design-patterns Скилл с 38 правилами проектирования REST API: ресурсы, ошибки, безопасность, пагинация, версионирование. Пригодится, когда агент пишет или проверяет эндпоинты. CX Codex +1 929установок testing-best-practices Набор правил по юнит- и интеграционным тестам и TDD: 34 правила в 7 категориях на TypeScript с Jest и Vitest. Пригодится, когда пишете тесты или разбираете чужие. CX Codex +1 899установок e2e-playwright-testing Скилл для написания и разбора E2E-тестов на Playwright: локаторы, авторизация, формы, ассерты и конфиг для CI. CX Codex +1 796установок state-management Скилл с готовыми паттернами TanStack Query v5 и Zustand v5: запросы, кеш, мутации, оптимистичные обновления и клиентские сторы. CX Codex +1 783установок laravel-mcp Скилл для разработки MCP-серверов на Laravel: инструменты, промпты, ресурсы и защита через OAuth или Sanctum. CX Codex +1 651установок

Похожие

improve-codebase-architecture Matt Pocock Скилл ищет архитектурные узкие места в кодовой базе и показывает варианты углубления модулей в HTML-отчёте. Подойдёт для ревью перед рефакторингом. 1 163 035установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. CX Codex +1 678 700установок tdd Matt Pocock Скилл управляет циклом красный-зелёный в TDD: проверяет, что тесты пишутся до кода, держит их на уровне публичных интерфейсов и не завязывает на внутреннюю структуру. 1 141 062установок skill-creator официальный anthropics Помогает создать новый скилл, доработать существующий и проверить результат через тестовые промпты и оценки. 414 180установок agent-browser vercel-labs Скилл управляет браузером через CLI: открывает страницы, заполняет формы, нажимает кнопки и проверяет веб-приложения. Подходит для задач, где агенту нужно действовать в интерфейсе. CX Codex +1 1 200 000установок prototype Matt Pocock Создаёт временный прототип, чтобы проверить логику, модель состояния или вид интерфейса до работы над основным кодом. 986 201установок

Рядом в теме «Тесты и QA»

Всё по теме «Тесты и QA» →

Вопросы о laravel-testing

Как установить laravel-testing в Claude Code?

Выполните команду npx skills add AsyrafHussin/agent-skills --skill laravel-testing -a claude-code. Файл правил запишется по пути ~/.claude/skills/laravel-testing/SKILL.md.

Что делает скилл laravel-testing?

Он задаёт правила генерации тестов для Laravel 13, автоматически выбирая синтаксис Pest 4 или PHPUnit 12. В правила входят паттерны для фабрик, HTTP-проверок и моков системных сервисов.

Как скилл определяет, использовать Pest или PHPUnit?

Ассистент проверяет секцию require-dev в composer.json и файл tests/Pest.php. Если обнаружен Pest, тесты пишутся на его синтаксисе, иначе создаются стандартные тестовые классы PHPUnit.

Исходный текст

SKILL.md · MIT
---
name: laravel-testing
description: Laravel 13 testing with Pest PHP 4 or PHPUnit 12. Use when writing feature tests, unit tests, or any test code in a Laravel application. Triggers on tasks involving HTTP tests, model factories, database assertions, mocking facades, authentication testing, or test organisation patterns.
license: MIT
metadata:
  author: Laravel Community
  version: "1.1.0"
  laravelVersion: "13.x"
  phpVersion: "8.3+"
  pestVersion: "4.x"
  phpunitVersion: "12.x"
---

# Laravel 13 Testing — Pest PHP 4 & PHPUnit 12

> **Supports both Pest PHP 4 and PHPUnit 12.** See Framework Detection below.
>
> **PHPUnit version note:** Laravel 13 ships with `phpunit/phpunit: ^12.5.12` in its default `composer.json`. All patterns in this skill are compatible with PHPUnit 11, 12, and 13.

Comprehensive testing guide for Laravel 13 applications. Contains 24 rules across 6 categories for writing fast, readable, and reliable tests. Supports both **Pest PHP 4** and **PHPUnit 12** (Laravel 13 default).

## Framework Detection

**Before writing or reviewing any test code, detect which testing framework the project uses:**

### Step 1 — Check composer.json

```bash
# Look for these in require-dev:
# "pestphp/pest" → Pest
# "phpunit/phpunit" (without pest) → PHPUnit
```

- If `pestphp/pest` is present → **use Pest syntax**
- If only `phpunit/phpunit` is present → **use PHPUnit syntax**
- If both are present → **Pest takes priority** (Pest runs on top of PHPUnit)

### Step 2 — Check for tests/Pest.php

- If `tests/Pest.php` exists → **Pest is configured**, use Pest syntax

### Step 3 — If still unclear, ask the user

> "I couldn't detect the testing framework. Does this project use **Pest PHP** or **PHPUnit**?"

---

## Syntax Reference

### Test Declaration

| | Pest | PHPUnit |
|--|------|---------|
| Test function | `test('...', fn() => ...)` | `public function test_...(): void` |
| Readable name | `it('...', fn() => ...)` | `#[Test] public function it_...()` |
| Grouping | `describe('...', fn() => ...)` | Test class name / nested classes |
| Trait application | `uses(RefreshDatabase::class)` | `use RefreshDatabase;` inside class |
| Before each | `beforeEach(fn() => ...)` | `protected function setUp(): void` |
| After each | `afterEach(fn() => ...)` | `protected function tearDown(): void` |
| Parameterised | `->with([...])` | `#[DataProvider]` attribute |
| Global setup | `uses(...)->in('Feature')` in `Pest.php` | Base `TestCase` class |

### Core assertions (identical in both frameworks)

`assertStatus`, `assertJson`, `assertJsonPath`, `assertDatabaseHas`, `assertModelExists`, `actingAs`, `Mail::fake()`, `Queue::fake()`, `Event::fake()`, `Notification::fake()`, `Storage::fake()` — all work the same in Pest and PHPUnit.

---

## When to Apply

Reference these guidelines when:
- Writing feature or unit tests for Laravel
- Testing HTTP endpoints and API responses
- Creating factories and test data
- Asserting database state after operations
- Faking Mail, Queue, Notification, or Event facades
- Testing authenticated routes and API tokens
- Organising tests with describe blocks, datasets, or test classes

## Rule Categories by Priority

| Priority | Category | Impact | Prefix |
|----------|----------|--------|--------|
| 1 | HTTP & Feature Tests | CRITICAL | `http-` |
| 2 | Model Factories | CRITICAL | `factory-` |
| 3 | Database Assertions | HIGH | `db-` |
| 4 | Faking Services | HIGH | `fake-` |
| 5 | Authentication Testing | HIGH | `auth-` |
| 6 | Test Organisation Patterns | MEDIUM | `pest-` |

## Quick Reference

### 1. HTTP & Feature Tests (CRITICAL)

- `http-test-structure` - Arrange/Act/Assert with factories — Pest + PHPUnit examples
- `http-assert-response` - assertStatus, assertJson, assertRedirect, assertJsonMissing
- `http-assert-json-fluent` - Fluent assertJson with AssertableJson closure
- `http-refresh-database` - RefreshDatabase vs DatabaseTransactions — when to use each

### 2. Model Factories (CRITICAL)

- `factory-define` - Define factories with typed fake data and PHP 8.3 syntax
- `factory-states` - Factory states for distinct test scenarios
- `factory-sequences` - sequence() for varied data across multiple records
- `factory-relationships` - has(), for(), recycle(), afterCreating()

### 3. Database Assertions (HIGH)

- `db-assert-has` - assertDatabaseHas, assertModelExists for presence checks
- `db-assert-missing` - assertDatabaseMissing, assertModelMissing for deletion
- `db-assert-soft-deletes` - assertSoftDeleted, trashed() factory state

### 4. Faking Services (HIGH)

- `fake-mail` - Mail::fake(), assertSent vs assertQueued, assertNothingSent
- `fake-queue` - Queue::fake(), assertPushed, assertPushedOn
- `fake-notification` - Notification::fake(), assertSentTo, assertCount
- `fake-event` - Event::fake(), assertDispatched, assertNotDispatched
- `fake-storage` - Storage::fake(), UploadedFile::fake(), assertExists
- `fake-ai-agent` - Agent::fake(), assertPrompted, preventStrayPrompts (Laravel 13+)
- `fake-ai-media` - Image::fake(), Audio::fake(), Transcription::fake() (Laravel 13+)
- `fake-ai-data` - Embeddings::fake(), Reranking::fake(), Files::fake(), Stores::fake() (Laravel 13+)

### 5. Authentication Testing (HIGH)

- `auth-acting-as` - actingAs() for session/web authenticated tests
- `auth-sanctum` - Sanctum::actingAs() for API token authentication

### 6. Test Organisation Patterns (MEDIUM)

- `pest-describe-it` - describe()/it() (Pest) or test class organisation (PHPUnit)
- `pest-datasets` - with() datasets (Pest) or #[DataProvider] (PHPUnit)
- `pest-hooks` - beforeEach/afterEach (Pest) or setUp/tearDown (PHPUnit)

## Essential Patterns

### Pest

```php
<?php

use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;

uses(RefreshDatabase::class);

test('authenticated user can create a post', function () {
    $user = User::factory()->create();

    $this->actingAs($user)
        ->postJson('/api/posts', ['title' => 'Hello World', 'body' => 'Content.'])
        ->assertStatus(201)
        ->assertJsonPath('data.title', 'Hello World');

    $this->assertDatabaseHas('posts', ['title' => 'Hello World', 'user_id' => $user->id]);
});
```

### PHPUnit

```php
<?php

namespace Tests\Feature;

use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class PostControllerTest extends TestCase
{
    use RefreshDatabase;

    public function test_authenticated_user_can_create_a_post(): void
    {
        $user = User::factory()->create();

        $this->actingAs($user)
            ->postJson('/api/posts', ['title' => 'Hello World', 'body' => 'Content.'])
            ->assertStatus(201)
            ->assertJsonPath('data.title', 'Hello World');

        $this->assertDatabaseHas('posts', ['title' => 'Hello World', 'user_id' => $user->id]);
    }
}
```

## How to Use

Read individual rule files for detailed explanations and code examples.

Each rule file contains:
- YAML frontmatter with metadata (title, impact, tags)
- Brief explanation of why it matters
- Bad Example with explanation
- Good Example with both Pest and PHPUnit where syntax differs
- Laravel 13 specific context and references

## Full Compiled Document

For the complete guide with all rules expanded: `AGENTS.md`

© Laravel Community · MIT · AsyrafHussin/agent-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой