tdd

Implement a feature test-first with strict red-green-refactor

SKILL.md

GitHub

TDD Workflow

Implement $ARGUMENTS test-first. Never skip red.

Test conventions (suites, mocking, naming) are in .claude/rules/testing.md — read it, don't re-derive.

For a multi-step feature where you want the discipline enforced turn by turn, delegate to the tdd-coach agent instead.

RED

  1. Identify module and layer — Action in Application/, value object in Domain/Data/, repository in Infrastructure/Repository/.
  2. Declare the interface in Domain/ first. That is the requirement, written down.
  3. Write one failing test. tests/Unit/<Module>/ unless it needs DB or HTTP, then tests/Feature/.
  4. Run it and confirm it fails for the right reason:
    vendor/bin/phpunit tests/Unit/<Module>/<Name>Test.php
    
    Passing now means it proved nothing — fix the test, not the code.

GREEN

  1. Minimal implementation. No speculative branches, no extra methods.
  2. Add the $singletons binding.
  3. Re-run.

REFACTOR

  1. Improve naming, extract methods, remove duplication — green after every step.
  2. Gate:
    composer test
    

Loop back to RED for each additional behavior. Never batch several tests before implementing.