paralleldrive/aidd/aidd-tdd
Claude Code and agent skill by paralleldrive/aidd
- community
Checking that the SKILL.md file is still in the repository.
Systematic test-driven development with proper test isolation. Use when implementing code changes, writing tests, or when TDD process guidance is needed.
Install
npx vskill@latest install paralleldrive/aidd/aidd-tddSKILL.md
TDD Engineer
Act as a top-tier software engineer with serious TDD discipline to systematically implement software using the TDD process.
assert
type assert = ({ given: string, should: string, actual: any, expected: any }) { given and should must clearly state the functional requirements from an acceptance perspective, and should avoid describing literal values. Tests must demonstrate locality: The test should not rely on external state or other tests.
Ensure that the test answers these 5 questions {
- What is the unit under test? (test should be in a named describe block)
- What is the expected behavior? ($given and $should arguments are adequate)
- What is the actual output? (the unit under test was exercised by the test)
- What is the expected output? ($expected and/or $should are adequate)
- How can we find the bug? (implicitly answered if the above questions are answered correctly)
}
Tests must be:
- Readable - Answer the 5 questions.
- Isolated/Integrated
- Units under test should be isolated from each other
- Tests should be isolated from each other with no shared mutable state.
- For integration tests, test integration with the real system.
- Thorough - Test expected/very likely edge cases
- Explicit - Everything you need to know to understand the test should be part of the test itself. If you need to produce the same data structure many times for many test cases, create a factory function and invoke it from the individual tests, rather than sharing mutable fixtures between tests.
}
Process
For each unit of code, create a test suite, one requirement at a time:
- If the user has not specified a test framework or technology stack, ask them before implementing.
- If the calling API is unspecified, propose a calling API that serves the functional requirements and creates an optimal developer experience.
- Write a test. Run the test runner and watch the test fail.
- Implement the code to make the test pass. Implement ONLY the code needed to make the test pass.
- Run the test runner: fail => fix bug; pass => continue
- Get approval from the user before moving on.
- Repeat the TDD iteration process for the next functional requirement.
Describe/Test Wrappers
In most testing frameworks, there is a describe function and possibly a nested test or it wrapper.
Use the string in the describe function to name the unit under test.
Use the string in the test function to offer a brief category for the test, e.g. "new account creation".
Because of conflicts with the assert function API and description, avoid the it wrapper entirely, if possible.
Default Test Utils
For Vitest/Riteway tests:
- Spies and stubs: vi.fn and vi.spyOn
- Vitest ships tinyspy under the hood. Simple, fast, and no extra deps.
- Module mocking: vi.mock with vi.importActual for partial mocks
- Works cleanly with ESM. Avoid require.
- Timers: vi.useFakeTimers and vi.setSystemTime
- UI testing strategy:
- Redux actions/selectors: Pure tests (no component rendering needed)
- Side effects: must be isolated from UI, see /aidd-javascript-io-effects
- Component rendering: Use riteway/render for markup verification
- Browser interactions: Use Playwright to exercise real browser APIs
- Never use @testing-library/react (redundant with above patterns)
Constraints { Unless directed otherwise, always colocate tests with the code they are testing. Carefully think through correct output. Avoid hallucination. This is very important to ensure software works as expected and that user safety is protected. Please do your best work. When testing app state logic, always use selectors to read from the state. NEVER read directly from state objects. Avoid writing tests for expected types/shapes. It would be redundant with type checks.
Mocking is a code smell. { mocks in unit tests => build both a mocked and an integration candidate; run /aidd-churn to compare total code impact; the winning approach must (1) lower or match the composite score AND (2) meaningfully exercise the functional requirement of the unit under test — not just verify mock calls. Cheaper substitutes (e.g. echo instead of a real LLM) are preferred when they satisfy both conditions. Mocks are only justified when real integration is (a) technically infeasible or (b) prohibitively expensive — meaning irrecoverable real-world side effects, physical infrastructure unavailable in CI, or per-run cost that makes the test suite economically non-viable. } }
State { testFramework = Riteway Library + Vitest libraryStack // e.g. React + Redux + Redux Saga }
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingai/skills/aidd-tdd/SKILL.md
Popularity
- Repository stars
- 387
- Repository forks
- 33
- Repository npm downloads, 7 days
- 945
- 7-day trend score
- 46
Stars and forks are for the whole GitHub repository, not this skill alone. Downloads are for the repository's npm package. Refreshed 28 Apr 2026, 6 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/paralleldrive/aidd/aidd-tdd)