Skip to main content

Overview

The tdd-workflow skill teaches the Test-Driven Development methodology, focusing on the RED-GREEN-REFACTOR cycle. It provides guidance on writing tests first, implementing minimal code, and refactoring with confidence.

What This Skill Provides

  • TDD Cycle: The RED-GREEN-REFACTOR loop
  • Three Laws of TDD: Core principles for test-first development
  • RED Phase: Writing failing tests that define behavior
  • GREEN Phase: Implementing minimal code to pass tests
  • REFACTOR Phase: Improving code quality while keeping tests green
  • Test Prioritization: Which tests to write first
  • AI-Augmented TDD: Multi-agent patterns for TDD

The TDD Cycle

🔴 RED → Write failing test

🟢 GREEN → Write minimal code to pass

🔵 REFACTOR → Improve code quality

   Repeat...

Three Laws of TDD

  1. Write production code only to make a failing test pass
  2. Write only enough test to demonstrate failure
  3. Write only enough code to make the test pass

Key Phases

RED Phase Principles

FocusExample
Behavior”should add two numbers”
Edge cases”should handle empty input”
Error states”should throw for invalid data”
Rules:
  • Test must fail first
  • Test name describes expected behavior
  • One assertion per test (ideally)

GREEN Phase Principles

PrincipleMeaning
YAGNIYou Aren’t Gonna Need It
Simplest thingWrite the minimum to pass
No optimizationJust make it work
Rules:
  • Don’t write unneeded code
  • Don’t optimize yet
  • Pass the test, nothing more

REFACTOR Phase Principles

AreaAction
DuplicationExtract common code
NamingMake intent clear
StructureImprove organization
ComplexitySimplify logic
Rules:
  • All tests must stay green
  • Small incremental changes
  • Commit after each refactor

Use Cases

When to Use TDD

ScenarioTDD Value
New featureHigh
Bug fixHigh (write test first)
Complex logicHigh
ExploratoryLow (spike, then TDD)
UI layoutLow

Example Scenarios

  1. New Feature: “Build a user registration system using TDD”
  2. Bug Fix: “Write a test that reproduces the bug, then fix it”
  3. Refactoring: “Refactor this module with test coverage”
  4. Complex Logic: “Implement rate limiting with TDD”

Test Prioritization

PriorityTest Type
1Happy path
2Error cases
3Edge cases
4Performance

AAA Pattern

Every test follows:
StepPurpose
ArrangeSet up test data
ActExecute code under test
AssertVerify expected outcome

Anti-Patterns to Avoid

❌ Don’t✅ Do
Skip the RED phaseWatch test fail first
Write tests afterWrite tests before
Over-engineer initialKeep it simple
Multiple assertsOne behavior per test
Test implementationTest behavior

AI-Augmented TDD

Multi-Agent Pattern

AgentRole
Agent AWrite failing tests (RED)
Agent BImplement to pass (GREEN)
Agent COptimize (REFACTOR)
  • testing-patterns: General testing principles
  • webapp-testing: E2E testing with Playwright
  • clean-code: Code quality during refactoring
  • code-review-checklist: Reviewing TDD code

Which Agents Use This Skill

  • test-engineer: Primary user for TDD methodology

Workflow Example

Step 1: RED

test('should calculate total price with tax', () => {
  expect(calculateTotal(100, 0.1)).toBe(110);
});
// ❌ Test fails - function doesn't exist

Step 2: GREEN

function calculateTotal(price: number, tax: number) {
  return price + (price * tax);
}
// ✅ Test passes - minimal implementation

Step 3: REFACTOR

function calculateTotal(price: number, taxRate: number) {
  const taxAmount = price * taxRate;
  return price + taxAmount;
}
// ✅ Tests still pass - improved clarity

Tools Available

  • Read, Write, Edit: For test and implementation files
  • Glob, Grep: For finding test patterns
  • Bash: For running tests in the cycle

Remember: The test is the specification. If you can’t write a test, you don’t understand the requirement.

Build docs developers (and LLMs) love