Percerno Skillsbeta
← everything it can do · engineering

Tdd TEXT

Guides the development of features or bug fixes using a strict test-driven development (TDD) workflow, ensuring tests are written at public interfaces before implementation.

6 uses this weeksource mattpococklicence MIT
Quality gate: FAIL · better answers · measured 2026-10-24
Blind-judged against the bare model on 2 requests: average lift -7.0 points (specificity, structure, method, fit).
won 0/2, lift -7.0, tokens ×40.88
Security scan: clean · 2026-10-24 · 4 files · ran in sandbox
no network calls, shell tricks, credential access or instruction tampering found in its files.

Try asking

Say it in your own words; the assistant finds this recipe by itself. Examples:

“Jeg vil gerne implementere den nye login-funktion. Lad os starte med at skrive den fejlede test, så koder vi løsningen.”
“Kan du skrive en integrationstest for betjening af kassen, før vi ændrer noget i backend-koden?”
“Vi skal rette en fejl i priskalkulationen. Brug TDD, så vi er sikre på, at vi ikke bryder noget andet.”
“I need to add a discount calculation feature to the cart. Let's do this TDD style, starting with the test for the 10% off scenario.”
“Can you write the failing test for the user login endpoint first, before we touch the controller code?”
“I want to implement the new payment gateway integration. Please follow the red-green loop and show me the test cases you propose for the seams.”
Try this skill from Claude, ChatGPT or a chat on your own page. Free plan, no credit card.Get started free

Good for

tddtestingred-green-refactorunit-testingintegration-testingsoftware-developmentquality-assurancetest-first

Not for

Do not use this skill for general code refactoring without new tests, as refactoring is handled by the code-review skill. It is not suitable for writing documentation or for debugging existing code without the intent to add new test coverage first.

Details

When it is the right choice

Use this skill when the user explicitly requests to build a feature or fix a bug using test-driven development. It is also appropriate when the user mentions the 'red-green-refactor' cycle or asks for integration tests to be written before the implementation code.

The full recipe the assistant reads

Test-Driven Development

TDD is the red → green loop. This skill is the reference that makes that loop produce tests worth keeping: what a good test is, where tests go, the anti-patterns, and the rules of the loop. Every section applies on every cycle: consult them before and during the loop, not after.

When exploring the codebase, read GLOSSARY.md (if it exists) so test names and interface vocabulary match the project's domain language, and respect ADRs in the area you're touching.

What a good test is

Tests verify behavior through public interfaces, not implementation details. Code can change entirely; tests shouldn't. A good test reads like a specification: "user can checkout with valid cart" tells you exactly what capability exists, and it survives refactors because it doesn't care about internal structure.

See tests.md for examples and mocking.md for mocking guidelines.

Seams: where tests go

A seam is the public boundary you test at: the interface where you observe behavior without reaching inside. Tests live at seams, never against internals.

Test only at pre-agreed seams. Before writing any test, write down the seams under test and confirm them with the user. No test is written at an unconfirmed seam. You can't test everything, so agreeing the seams up front is how testing effort lands on the critical paths and complex logic instead of every edge case.

Ask: "What's the public interface, and which seams should we test?" Give each proposed seam a one-line note on what it catches and what it misses.

When the shape of that interface is itself in question (how deep the module is, where the seam belongs, what the interface should expose), call the Skill tool with "codebase-design" for the vocabulary. It is the shared source of the module, interface, depth, seam, adapter, leverage and locality terms, and it is a reference to consult, not a session to run.

Anti-patterns

  • Implementation-coupled: mocks internal collaborators, tests private methods, or verifies through a side channel (querying the database instead of using the interface). The tell: the test breaks when you refactor but behavior hasn't changed.
  • Tautological: the assertion recomputes the expected value the way the code does (expect(add(a, b)).toBe(a + b), a snapshot derived by hand the same way, a constant asserted equal to itself), so it passes by construction and can never disagree with the code. Expected values must come from an independent source of truth: a known-good literal, a worked example, the spec.
  • Horizontal slicing: writing all tests first, then all implementation. Bulk tests verify imagined behavior: you test the shape of things rather than user-facing behavior, the tests go insensitive to real changes, and you commit to test structure before understanding the implementation. Work in vertical slices instead: one test → one implementation → repeat, each test a tracer bullet that responds to what the last cycle taught you.

Rules of the loop

  • Red before green. Write the failing test first, then only enough code to pass it. Don't anticipate future tests or add speculative features.
  • One slice at a time. One seam, one test, one minimal implementation per cycle.
  • Refactoring is not part of the loop. It belongs to the review stage (see the code-review skill), not the red → green implementation cycle.
Files in this skill (5)
  • LICENSE
  • SKILL.md
  • agents/openai.yaml
  • mocking.md
  • tests.md
Where it comes from

Vendored from mattpocock/skills, commit 5beb35b040e3, path skills/engineering/tdd, licence MIT. The upstream licence file ships inside the skill.