
Red Green Refactor
Guides the red-green-refactor TDD workflow: write a failing test first, implement the...
Install
npx skills add rohitg00/skillkit --skill red-green-refactor -g -a claude-code -y- Repository
- rohitg00/skillkit1.6k
- Category
- Testing
- Updated
- 5mo ago
- License
- Apache-2.0
- Context cost
- Lightabout 1,128 tokens
- Runs scripts
- No, instructions only
What it does
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'.
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):
// calculateTotal.test.js
const { calculateTotal } = require('./calculateTotal');
describe('calculateTotal', () => {
it('should apply 10% discount when total exceeds 100', () => {
const items = [{ price: 60 }, { price: 60 }]; // total = 120
expect(calculateTotal(items)).toBe(108); // 120 * 0.90
});
});
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.
// calculateTotal.js
function calculateTotal(items) {
const total = items.reduce((sum, item) => sum + item.price, 0);
return total > 100 ? total * 0.9 : total;
}
module.exports = { calculateTotal };
Run the test, it passes. GREEN achieved. Stop here; resist adding more logic.
3. REFACTOR Phase, Improve the Code
With a passing test as your safety net, clean up the implementation. Run tests after every change.
// calculateTotal.js, refactored for clarity
const DISCOUNT_THRESHOLD = 100;
const DISCOUNT_RATE = 0.9;
function calculateTotal(items) {
const subtotal = items.reduce((sum, { price }) => sum + price, 0);
return subtotal > DISCOUNT_THRESHOLD ? subtotal * DISCOUNT_RATE : subtotal;
}
module.exports = { calculateTotal };
Test still passes, GREEN maintained. Constants now communicate intent.


