--- name: tdd-with-pest description: Apply RED-GREEN-REFACTOR with Pest v4 (PHP 8.3+) for Symfony via the PHPUnit bridge; Foundry factories, WebTestCase, verify failures first capabilities: [read, search, edit, shell] tags: [testing, tdd] # projected by `bun run build` — do not edit by hand allowed-tools: - Read - Glob - Grep - Write - Edit - Bash --- # Tdd With Pest (Symfony) ## Use when - Driving a feature with RED-GREEN-REFACTOR in a project that runs Pest v4 (PHP 8.3+). - Writing `it()` and `expect()` tests that need the Symfony kernel or an HTTP client. - Converting existing PHPUnit class tests to Pest syntax with `pest-plugin-drift`. - Adding a bug-reproducing test to a Pest suite before the fix. ## Default workflow 1. Confirm PHP 8.3+ and Pest v4, then generate `tests/Pest.php` with `./vendor/bin/pest --init`. 2. Bind the bridge classes in `tests/Pest.php`: `uses(KernelTestCase::class, Factories::class, ResetDatabase::class)->in('Integration')` and `uses(WebTestCase::class, ...)->in('Functional')`. 3. RED: write an `it()` test with Foundry v2 factories, run `./vendor/bin/pest --filter` and check it fails for the right reason. 4. GREEN: write the minimal code, then REFACTOR and re-run `./vendor/bin/pest`. 5. Gate the suite with `--parallel` and `--coverage --min=80`. ## Guardrails - There is no official Symfony Pest plugin: never reference `pestphp/pest-plugin-symfony`, bind `KernelTestCase` or `WebTestCase` through `uses()`. - Foundry v2 factories return real objects: no `->object()` call. - Pest test files are anonymous, so use the `Factories` and `ResetDatabase` traits rather than the `#[ResetDatabase]` attribute. - Chain related checks with `expect()->and()`; keep one concept per test. ## Progressive disclosure - Use this file for execution posture and risk controls. - Open references when deep implementation details are needed. ## Output contract - The failing `./vendor/bin/pest` output (RED), then the passing run. - `tests/Pest.php` bindings added or changed. - Test files changed and the commands executed. ## References - `reference.md`