MR
Mayur Rathi
@mayurrathi
⭐ 40.7k GitHub stars

Test Driven Development

Test Driven Development is an writing AI skill with a core value of Use when implementing any feature or bugfix, before writing implementation code. It helps developers solve real-world problems in the writing domain, boosting efficiency, automating repetitive tasks, and optimizing workflows.

Use when implementing any feature or bugfix, before writing implementation code

Last verified on: 2026-07-07

Quick Facts

Category writing
Works With Claude
Source sickn33/antigravity-awesome-skills
Stars ⭐ 40.7k
Last Verified 2026-07-07
Risk Level Low
mkdir -p ./skills/test-driven-development && curl -sfL https://raw.githubusercontent.com/sickn33/antigravity-awesome-skills/main/skills/test-driven-development/SKILL.md -o ./skills/test-driven-development/SKILL.md

Run in terminal / PowerShell. Requires curl (Unix) or PowerShell 5+ (Windows).

Skill Content

# Test-Driven Development (TDD)


Overview


Write the test first. Watch it fail. Write minimal code to pass.


**Core principle:** If you didn't watch the test fail, you don't know if it tests the right thing.


**Violating the letter of the rules is violating the spirit of the rules.**


When to Use


**Always:**

- New features

- Bug fixes

- Refactoring

- Behavior changes


**Exceptions (ask your human partner):**

- Throwaway prototypes

- Generated code

- Configuration files


Thinking "skip TDD just this once"? Stop. That's rationalization.


The Iron Law


text
NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST

Write code before the test? Delete it. Start over.


**No exceptions:**

- Don't keep it as "reference"

- Don't "adapt" it while writing tests

- Don't look at it

- Delete means delete


Implement fresh from tests. Period.


Red-Green-Refactor


dot
digraph tdd_cycle {
    rankdir=LR;
    red [label="RED\nWrite failing test", shape=box, style=filled, fillcolor="#ffcccc"];
    verify_red [label="Verify fails\ncorrectly", shape=diamond];
    green [label="GREEN\nMinimal code", shape=box, style=filled, fillcolor="#ccffcc"];
    verify_green [label="Verify passes\nAll green", shape=diamond];
    refactor [label="REFACTOR\nClean up", shape=box, style=filled, fillcolor="#ccccff"];
    next [label="Next", shape=ellipse];

    red -> verify_red;
    verify_red -> green [label="yes"];
    verify_red -> red [label="wrong\nfailure"];
    green -> verify_green;
    verify_green -> refactor [label="yes"];
    verify_green -> green [label="no"];
    refactor -> verify_green [label="stay\ngreen"];
    verify_green -> next;
    next -> red;
}

RED - Write Failing Test


Write one minimal test showing what should happen.


<Good>

typescript
test('retries failed operations 3 times', async () => {
  let attempts = 0;
  const operation = () => {
    attempts++;
    if (attempts < 3) throw new Error('fail');
    return 'success';
  };

  const result = await retryOperation(operation);

  expect(result).toBe('success');
  expect(attempts).toBe(3);
});

Clear name, tests real behavior, one thing

</Good>


<Bad>

typescript
test('retry works', async () => {
  const mock = jest.fn()
    .mockRejectedValueOnce(new Error())
    .mockRejectedValueOnce(new Error())
    .mockResolvedValueOnce('success');
  await retryOperation(mock);
  expect(mock).toHaveBeenCalledTimes(3);
});

Vague name, tests mock not code

</Bad>


**Requirements:**

- One behavior

- Clear name

- Real code (no mocks unless unavoidable)


Verify RED - Watch It Fail


**MANDATORY. Never skip.**


bash
npm test path/to/test.test.ts

Confirm:

- Test fails (not errors)

- Failure message is expected

- Fails because feature missing (not typos)


**Test passes?** You're testing existing behavior. Fix test.


**Test errors?** Fix error, re-run until it fails correctly.


GREEN - Minimal Code


Write simplest code to pass the test.


<Good>

typescript
async function retryOperation<T>(fn: () => Promise<T>): Promise<T> {
  for (let i = 0; i < 3; i++) {
    try {
      return await fn();
    } catch (e) {
      if (i === 2) throw e;
    }
  }
  throw new Error('unreachable');
}

Just enough to pass

</Good>


<Bad>

typescript
async function retryOperation<T>(
  fn: () => Promise<T>,
  options?: {
    maxRetries?: number;
    backoff?: 'linear' | 'exponential';
    onRetry?: (attempt: number) => void;
  }
): Promise<T> {
  // YAGNI
}

Over-engineered

</Bad>


Don't add features, refactor other code, or "improve" beyond the test.


Verify GREEN - Watch It Pass


**MANDATORY.**


bash
npm test path/to/test.test.ts

Confirm:

- Test passes

- Other tests still pass

- Output pristine (no errors, warnings)


**Test fails?** Fix code, not test.


**Other tests fail?** Fix now.


REFACTOR - Clean Up


After green only:

- Remove duplication

- Improve names

- Extract helpers


Keep tests green. Don't add behavior.


Repeat


Next failing test for next feature.


🎯 Best For

  • QA engineers
  • Developers writing unit tests
  • Claude users
  • Content creators
  • Writers

💡 Use Cases

  • Generating test cases for edge conditions
  • Writing integration test suites
  • Content creation
  • Style guide enforcement

📖 How to Use This Skill

  1. 1

    Install the Skill

    Copy the install command from the Terminal tab and run it. The SKILL.md file downloads to your local skills directory.

  2. 2

    Load into Your AI Assistant

    Open Claude and reference the skill. Paste the SKILL.md content or use the system prompt tab.

  3. 3

    Apply Test Driven Development to Your Work

    Provide context for your task — paste source material, describe your audience, or share existing work to guide the AI.

  4. 4

    Review and Refine

    Edit the AI output for accuracy, tone, and completeness. Add human insight where the AI lacks context.

❓ Frequently Asked Questions

Does this generate test mocks?

Many testing skills include mock generation. Check the install command and skill content for details.

Can Test Driven Development maintain my brand voice?

Yes — provide style guides or example content in your prompt for consistent brand-aligned output.

How do I install Test Driven Development?

Copy the install command from the Terminal tab and run it. The skill downloads to ./skills/test-driven-development/SKILL.md, ready to use.

Can I customize this skill for my team?

Absolutely. Edit the SKILL.md file to add team-specific instructions, examples, or workflows.

⚠️ Common Mistakes to Avoid

Not testing edge cases

AI tends to generate happy-path tests. Manually review for boundary conditions.

Publishing unedited drafts

AI writing needs human editing for facts, flow, and authentic voice.

🔗 Related Skills