MoAI TDD Workflow
modu-ai/moai-adk
Drives test-first development through the RED, GREEN, REFACTOR cycle, with a config switch that selects between TDD and a DDD workflow for existing code.
Applies proven testing patterns — Arrange-Act-Assert (AAA), Given-When-Then, Test Data Builders, Object Mother, parameterized tests, fixtures, spies, and test doubles — to help write maintainable…
$ npx skills add rohitg00/skillkit --skill test-patterns -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rohitg00/skillkit test-patterns --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rohitg00/skillkit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/core/src/methodology/packs/testing/test-patterns .claude/skills/test-patterns && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "test-patterns" agent skill from https://github.com/rohitg00/skillkit/tree/main/packages/core/src/methodology/packs/testing/test-patterns into .claude/skills/test-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-patterns", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rohitg00/skillkit/tree/main/packages/core/src/methodology/packs/testing/test-patternsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rohitg00/skillkit --skill test-patterns -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rohitg00/skillkit test-patterns --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rohitg00/skillkit.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/core/src/methodology/packs/testing/test-patterns .agents/skills/test-patterns && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "test-patterns" agent skill from https://github.com/rohitg00/skillkit/tree/main/packages/core/src/methodology/packs/testing/test-patterns into .agents/skills/test-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-patterns", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rohitg00/skillkit --skill test-patterns -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rohitg00/skillkit test-patterns --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rohitg00/skillkit.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/core/src/methodology/packs/testing/test-patterns .cursor/skills/test-patterns && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "test-patterns" agent skill from https://github.com/rohitg00/skillkit/tree/main/packages/core/src/methodology/packs/testing/test-patterns into .cursor/skills/test-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-patterns", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rohitg00/skillkit.git --path packages/core/src/methodology/packs/testing/test-patterns--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rohitg00/skillkit --skill test-patterns -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rohitg00/skillkit test-patterns --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rohitg00/skillkit.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/core/src/methodology/packs/testing/test-patterns .gemini/skills/test-patterns && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "test-patterns" agent skill from https://github.com/rohitg00/skillkit/tree/main/packages/core/src/methodology/packs/testing/test-patterns into .gemini/skills/test-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-patterns", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rohitg00/skillkit test-patternsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rohitg00/skillkit --skill test-patterns -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rohitg00/skillkit.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/core/src/methodology/packs/testing/test-patterns .github/skills/test-patterns && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "test-patterns" agent skill from https://github.com/rohitg00/skillkit/tree/main/packages/core/src/methodology/packs/testing/test-patterns into .github/skills/test-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-patterns", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rohitg00/skillkit --skill test-patterns -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rohitg00/skillkit test-patterns --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rohitg00/skillkit.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/core/src/methodology/packs/testing/test-patterns .opencode/skills/test-patterns && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "test-patterns" agent skill from https://github.com/rohitg00/skillkit/tree/main/packages/core/src/methodology/packs/testing/test-patterns into .opencode/skills/test-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-patterns", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
test-patternsApplies proven testing patterns — Arrange-Act-Assert (AAA), Given-When-Then, Test Data Builders, Object Mother, parameterized tests, fixtures, spies, and test doubles — to help write maintainable…
Test Patterns is an agent skill from rohitg00/skillkit. Applies proven testing patterns — Arrange-Act-Assert (AAA), Given-When-Then, Test Data Builders, Object Mother, parameterized tests, fixtures, spies, and test doubles — to help write maintainable, reliable, and readable test suites. Use when the user asks about writing unit tests, integration tests, or end-to-end tests; structuring test cases or test suites; applying TDD or BDD practices; working with mocks, stubs, spies, or fakes; improving test coverage or reducing flakiness; or needs guidance on test…
Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Unit testing, Test generation and Test data and fixtures. It works with Jest, pytest and Vitest. The repository describes itself as: Supercharge AI coding agents with portable skills. Install, translate & share skills across Claude Code, Cursor, Codex, Copilot & 40 more. The licence is Apache-2.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d2e5c34. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Test Patterns loads about 1.8k tokens when it runs. Until then it costs about 156 tokens; SKILL.md has 414 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from rohitg00/skillkit at commit d2e5c34, republished under its Apache-2.0 licence (© rohitg00). 414 words, ~1,762 tokens.
.claude/skills/test-patterns/SKILL.md (or your agent's skills folder).You are applying proven testing patterns to write maintainable, reliable tests. These patterns help ensure tests are readable, focused, and trustworthy.
Use this to choose the right pattern for your situation:
Patterns rarely stand alone — here's how to combine them for common scenarios:
Unit tests (isolated logic): Fixtures for setup → AAA structure → Stubs/Mocks for dependencies → Parameterized Tests for multiple input cases
Integration tests (service + external dependencies): Fixtures for setup → AAA structure → Fakes for external services (e.g. in-memory DB) → Spies to verify interaction points
BDD / feature specs: Given-When-Then → Object Mother or Test Data Builders for scenario data → Fakes for infrastructure
High-variation logic (validators, calculators, formatters): Parameterized Tests → Test Data Builders to construct each case → AAA structure within each case
Structure every test with three distinct phases:
// Arrange - Set up test data and dependencies
const user = createTestUser({ role: 'admin' });
const service = new UserService(mockRepository);
// Act - Execute the code under test
const result = await service.updateRole(user.id, 'member');
// Assert - Verify the expected outcome
expect(result.role).toBe('member');
expect(mockRepository.save).toHaveBeenCalledWith(user);Guidelines:
For behavior-focused tests:
describe('Shopping Cart', () => {
describe('when adding an item', () => {
it('should increase the item count', () => {
// Given
const cart = new Cart();
// When
cart.add({ id: '1', quantity: 2 });
// Then
expect(cart.itemCount).toBe(2);
});
});
});Create flexible test data without repetition:
// Builder function
function createTestOrder(overrides = {}) {
return {
id: 'order-123',
status: 'pending',
items: [],
total: 0,
...overrides
};
}
// Usage
const completedOrder = createTestOrder({ status: 'completed', total: 99.99 });
const emptyOrder = createTestOrder({ items: [] });Factory for complex test objects:
class TestUserFactory {
static admin() {
return new User({ role: 'admin', permissions: ALL_PERMISSIONS });
}
static guest() {
return new User({ role: 'guest', permissions: [] });
}
static withSubscription(tier) {
return new User({ subscription: { tier, active: true } });
}
}Test multiple cases efficiently:
describe('isValidEmail', () => {
const validCases = [
'user@example.com',
'user.name@domain.co.uk',
'user+tag@example.org'
];
const invalidCases = [
'',
'not-an-email',
'@no-local.com',
'no-domain@'
];
test.each(validCases)('should accept valid email: %s', (email) => {
expect(isValidEmail(email)).toBe(true);
});
test.each(invalidCases)('should reject invalid email: %s', (email) => {
expect(isValidEmail(email)).toBe(false);
});
});Reusable test setup:
describe('OrderService', () => {
let service;
let mockPaymentGateway;
let mockInventory;
beforeEach(() => {
mockPaymentGateway = createMockPaymentGateway();
mockInventory = createMockInventory();
service = new OrderService(mockPaymentGateway, mockInventory);
});
afterEach(() => {
jest.clearAllMocks();
});
});Verify interactions without implementation:
it('should send notification on order completion', async () => {
const notifySpy = jest.spyOn(notificationService, 'send');
await orderService.complete(orderId);
expect(notifySpy).toHaveBeenCalledWith({
type: 'order_completed',
orderId: orderId
});
});Choose the right type:
| Type | When to Use |
|---|---|
| Stub | Need predictable, canned return values |
| Mock | Need to assert a dependency was called correctly |
| Spy | Partial mocking — observe calls on a real object |
| Fake | Need a working lightweight substitute (e.g. in-memory DB) |
Ensure tests don't affect each other:
Test names should describe:
Good examples:
shouldReturnEmptyArrayWhenNoItemsExistthrowsErrorWhenUserNotAuthenticatedcalculatesDiscountForPremiumMemberssrc/
services/
UserService.ts
UserService.test.ts # Co-located tests
tests/
integration/
api.test.ts # Integration tests
e2e/
checkout.spec.ts # End-to-end testsFor each test:
© rohitg00, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in packages/core/src/methodology/packs/testing/test-patterns of rohitg00/skillkit.
Open the folder on GitHubat commit d2e5c34
Test Patterns next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Test Patterns this skillrohitg00/skillkit | 1.5k | — | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| MoAI TDD Workflowmodu-ai/moai-adk | 1.2k | — | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| Test Generatoralirezarezvani/claude-code-tresor | 777 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Accurate Testingtheexperiencecompany/gaia | 308 | — | ~3.4k | Automated safety check: Pass | Custom licence | |
| TDD Guidealirezarezvani/claude-skills | 28k | — | ~3.4k | Automated safety check: Pass | MIT | |
| Code Testing Agentmicrosoft/testfx | 1k | — | ~2.7k | Automated safety check: Pass | MIT |
modu-ai/moai-adk
Drives test-first development through the RED, GREEN, REFACTOR cycle, with a config switch that selects between TDD and a DDD workflow for existing code.
alirezarezvani/claude-code-tresor
Automatically suggest tests for new functions and components.
theexperiencecompany/gaia
Write adversarial test cases that break production code instead of producing false confidence.
alirezarezvani/claude-skills
Test-driven development skill for writing unit tests, generating test fixtures and mocks, analyzing coverage gaps, and guiding red-green-refactor workflows across Jest, Pytest, JUnit, Vitest, and…
microsoft/testfx
Generates and writes new unit tests for any programming language — scaffolds .NET test projects, pytest suites, Vitest/Jest suites, Go test files, and JUnit suites, and configures coverage tooling…
microsoft/testfx
Analyzes test suites in any language and tags each test with a standardized set of traits (positive, negative, critical-path, boundary, smoke, regression, integration, performance, security).
rohitg00/skillkit
Guides the creation of technical design documents before writing code, producing architecture diagrams, data models, API interface definitions, implementation plans, and multi-option trade-off…
rohitg00/skillkit
Discovers, searches, and installs skills from multiple AI agent skill marketplaces (400K+ skills) using the SkillKit CLI.
rohitg00/skillkit
Manages work transitions between team members or agents by creating structured handoff documents, summarizing project status, documenting key decisions, blockers, and open questions, and generating…
rohitg00/skillkit
Applies the scientific method to debugging by helping users form specific, testable hypotheses, design targeted experiments, and systematically confirm or reject theories to find root causes.
rohitg00/skillkit
Coordinates parallel investigation threads to simultaneously explore multiple hypotheses or root causes across different system areas.
rohitg00/skillkit
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.
Categories
Applies proven testing patterns — Arrange-Act-Assert (AAA), Given-When-Then, Test Data Builders, Object Mother, parameterized tests, fixtures, spies, and test doubles — to help write maintainable…. Test Patterns is an agent skill from rohitg00/skillkit. Applies proven testing patterns — Arrange-Act-Assert (AAA), Given-When-Then, Test Data Builders, Object Mother, parameterized tests, fixtures, spies, and test doubles — to help write maintainable, reliable, and readable test suites.
Test Patterns fits situations like: the user asks about writing unit tests; integration tests; end-to-end tests; structuring test cases.
Run `npx skills add rohitg00/skillkit --skill test-patterns -a claude-code`. Or copy the skill folder (packages/core/src/methodology/packs/testing/test-patterns in rohitg00/skillkit) into .claude/skills/test-patterns in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rohitg00/skillkit --skill test-patterns -a codex`. Or copy the skill folder (packages/core/src/methodology/packs/testing/test-patterns in rohitg00/skillkit) into .agents/skills/test-patterns in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rohitg00/skillkit --skill test-patterns -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/test-patterns, .gemini/skills/test-patterns, .github/skills/test-patterns and .opencode/skills/test-patterns in your project.
SKILL.md names no scripts, command-line tools or credentials: Test Patterns is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Test Patterns is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Test Patterns: MoAI TDD Workflow (modu-ai/moai-adk, 1.2k stars), Test Generator (alirezarezvani/claude-code-tresor, 777 stars), Accurate Testing (theexperiencecompany/gaia, 308 stars) and TDD Guide (alirezarezvani/claude-skills, 28k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rohitg00 (a GitHub user) maintains it in rohitg00/skillkit, which has 1,546 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on June 2, 2026.
Source: rohitg00/skillkit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.