pest-testing — скилл для Claude Code: что делает и как установить
Скилл настраивает работу с тестовым фреймворком Pest 4 в PHP. Он помогает писать юнит-, фиче-, браузерные и архитектурные тесты по правилам экосистемы.
npx skills add spatie/freek.dev --skill pest-testing -a claude-codeЧто делает pest-testing
Инструкции задают стандарты написания тестов для приложений на Laravel и Pest 4. Все новые тесты создаются через php artisan make:test --pest {name} и раскладываются по каталогам tests/Unit, tests/Feature или tests/Browser/. Скилл запрещает удалять существующие тесты без согласования, потому что считает их частью кода приложения.
В проверках ответов скилл требует заменять assertStatus(200) на assertSuccessful(), а для кодов 404 и 403 — вызывать assertNotFound() и assertForbidden(). Перед моками обязательно импортируется use function Pest\Laravel\mock;, иначе тест упадёт с ошибкой. Для повторяющихся проверок валидации задаются датасеты через ->with([...]).
В Pest 4 поддерживаются браузерные тесты в реальном браузере с проверкой отсутствия консольных ошибок через assertNoJavascriptErrors(). Также доступны смоук-тесты списков страниц, скриншотные тесты регрессии, шардинг для параллельного запуска в CI и архитектурные правила через arch().
Какие задачи решает
- написать юнит- и фиче-тесты для Laravel на Pest 4
- настроить браузерные тесты с проверкой ошибок JavaScript
- задать архитектурные правила для контроллеров через
arch() - проверить ответы API через
assertSuccessful()вместо статус-кодов
Примеры запросов агенту
- Напиши тест на Pest для проверки сброса пароля пользователя
- Добавь архитектурный тест для контроллеров в tests/Feature
- Создай смоук-тест на Pest 4 для проверки отсутствия ошибок консоли на главных страницах
Как установить pest-testing
1Через Skills CLI (Vercel)
npx skills add spatie/freek.dev --skill pest-testing -a claude-code2Вручную: положить файлы
~/.claude/skills/pest-testing/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/pest-testing/
1Через Skills CLI (Vercel)
npx skills add spatie/freek.dev --skill pest-testing -a codex2Вручную: положить файлы
.agents/skills/pest-testing/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add spatie/freek.dev --skill pest-testing -a cursor2Вручную: положить файлы
.cursor/skills/pest-testing/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install spatie/freek.dev pest-testing2Вручную: положить файлы
.github/skills/pest-testing/SKILL.md1Через Skills CLI (Vercel)
npx skills add spatie/freek.dev --skill pest-testing -a gemini-cli2Командой платформы
gemini skills install https://github.com/spatie/freek.dev --path .claude/skills/pest-testingВручную: положить файлы
.devin/skills/pest-testing/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add spatie/freek.dev --skill pest-testing -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора2
Похожие
Рядом в теме «Тесты и QA»
Всё по теме «Тесты и QA» →Вопросы о pest-testing
Как установить pest-testing в Claude Code?
Выполните команду npx skills add spatie/freek.dev --skill pest-testing -a claude-code в терминале.
Что делает скилл pest-testing?
Он даёт агенту правила и шаблоны для написания тестов на Pest 4 в PHP-проектах. Скилл охватывает юнит-, фиче-, браузерные и архитектурные проверки.
Какие правила по ассертам задаёт скилл?
Вместо числового вызова assertStatus(200) скилл требует писать assertSuccessful(). Для кодов 404 и 403 используются методы assertNotFound() и assertForbidden().
Исходный текст
SKILL.md · MIT
---
name: pest-testing
description: >-
Tests applications using the Pest 4 PHP framework. Activates when writing tests, creating unit or feature
tests, adding assertions, testing Livewire components, browser testing, debugging test failures,
working with datasets or mocking; or when the user mentions test, spec, TDD, expects, assertion,
coverage, or needs to verify functionality works.
---
# Pest Testing 4
## When to Apply
Activate this skill when:
- Creating new tests (unit, feature, or browser)
- Modifying existing tests
- Debugging test failures
- Working with browser testing or smoke testing
- Writing architecture tests or visual regression tests
## Documentation
Use `search-docs` for detailed Pest 4 patterns and documentation.
## Basic Usage
### Creating Tests
All tests must be written using Pest. Use `php artisan make:test --pest {name}`.
### Test Organization
- Unit/Feature tests: `tests/Feature` and `tests/Unit` directories.
- Browser tests: `tests/Browser/` directory.
- Do NOT remove tests without approval - these are core application code.
### Basic Test Structure
<code-snippet name="Basic Pest Test Example" lang="php">
it('is true', function () {
expect(true)->toBeTrue();
});
</code-snippet>
### Running Tests
- Run minimal tests with filter before finalizing: `php artisan test --compact --filter=testName`.
- Run all tests: `php artisan test --compact`.
- Run file: `php artisan test --compact tests/Feature/ExampleTest.php`.
## Assertions
Use specific assertions (`assertSuccessful()`, `assertNotFound()`) instead of `assertStatus()`:
<code-snippet name="Pest Response Assertion" lang="php">
it('returns all', function () {
$this->postJson('/api/docs', [])->assertSuccessful();
});
</code-snippet>
| Use | Instead of |
|-----|------------|
| `assertSuccessful()` | `assertStatus(200)` |
| `assertNotFound()` | `assertStatus(404)` |
| `assertForbidden()` | `assertStatus(403)` |
## Mocking
Import mock function before use: `use function Pest\Laravel\mock;`
## Datasets
Use datasets for repetitive tests (validation rules, etc.):
<code-snippet name="Pest Dataset Example" lang="php">
it('has emails', function (string $email) {
expect($email)->not->toBeEmpty();
})->with([
'james' => '[email protected]',
'taylor' => '[email protected]',
]);
</code-snippet>
## Pest 4 Features
| Feature | Purpose |
|---------|---------|
| Browser Testing | Full integration tests in real browsers |
| Smoke Testing | Validate multiple pages quickly |
| Visual Regression | Compare screenshots for visual changes |
| Test Sharding | Parallel CI runs |
| Architecture Testing | Enforce code conventions |
### Browser Test Example
Browser tests run in real browsers for full integration testing:
- Browser tests live in `tests/Browser/`.
- Use Laravel features like `Event::fake()`, `assertAuthenticated()`, and model factories.
- Use `RefreshDatabase` for clean state per test.
- Interact with page: click, type, scroll, select, submit, drag-and-drop, touch gestures.
- Test on multiple browsers (Chrome, Firefox, Safari) if requested.
- Test on different devices/viewports (iPhone 14 Pro, tablets) if requested.
- Switch color schemes (light/dark mode) when appropriate.
- Take screenshots or pause tests for debugging.
<code-snippet name="Pest Browser Test Example" lang="php">
it('may reset the password', function () {
Notification::fake();
$this->actingAs(User::factory()->create());
$page = visit('/sign-in');
$page->assertSee('Sign In')
->assertNoJavascriptErrors()
->click('Forgot Password?')
->fill('email', '[email protected]')
->click('Send Reset Link')
->assertSee('We have emailed your password reset link!');
Notification::assertSent(ResetPassword::class);
});
</code-snippet>
### Smoke Testing
Quickly validate multiple pages have no JavaScript errors:
<code-snippet name="Pest Smoke Testing Example" lang="php">
$pages = visit(['/', '/about', '/contact']);
$pages->assertNoJavascriptErrors()->assertNoConsoleLogs();
</code-snippet>
### Visual Regression Testing
Capture and compare screenshots to detect visual changes.
### Test Sharding
Split tests across parallel processes for faster CI runs.
### Architecture Testing
Pest 4 includes architecture testing (from Pest 3):
<code-snippet name="Architecture Test Example" lang="php">
arch('controllers')
->expect('App\Http\Controllers')
->toExtendNothing()
->toHaveSuffix('Controller');
</code-snippet>
## Common Pitfalls
- Not importing `use function Pest\Laravel\mock;` before using mock
- Using `assertStatus(200)` instead of `assertSuccessful()`
- Forgetting datasets for repetitive validation tests
- Deleting tests without approval
- Forgetting `assertNoJavascriptErrors()` in browser tests
© spatie · MIT · spatie/freek.dev