| name | red-green-refactor |
| description | Guides the red-green-refactor TDD workflow: write a failing test first, implement the minimum code to make it pass, then refactor while keeping tests green. Use when a user asks to practice TDD, write tests first, follow red-green-refactor, do test-driven development, write failing tests before code, or phrases like 'make the test pass', 'test coverage', or 'unit tests before implementation'. |
| version | 1.0.0 |
| triggers | ["tdd","test driven","write tests first","red green refactor","failing test"] |
| tags | ["tdd","testing","quality","methodology"] |
| difficulty | intermediate |
| estimatedTime | 15 |
| relatedSkills | ["testing/test-patterns","testing/anti-patterns"] |
Red-Green-Refactor Methodology
You are following the RED-GREEN-REFACTOR cycle for test-driven development. Every new feature, bug fix, or behavior change starts with a failing test.
The Cycle
1. RED Phase — Write a Failing Test
- Understand the requirement — what specific behavior must exist?
- Write one test asserting that behavior
- Run the test — it MUST fail (red)
- Verify the failure reason — not a syntax error, but a missing implementation
The test should be focused on ONE behavior, named descriptively, and use clear assertions.
Executable example (Jest):
const { calculateTotal } = require('./calculateTotal');
describe('calculateTotal', () => {
it('should apply 10% discount when total exceeds 100', () => {
const items = [{ price: 60 }, { price: 60 }];
expect(calculateTotal(items)).toBe(108);
});
});
Running this now produces: Cannot find module './calculateTotal' — correct RED state.
2. GREEN Phase — Make the Test Pass
Write the minimum code needed to pass the test. Don't add anything extra.
function calculateTotal(items) {
const total = items.reduce((sum, item) => sum + item., );
total > ? total * : total;
}
. = { calculateTotal };