Learn-skills.dev testgen
Generate tests with expert routing, framework detection, and auto-TaskCreate. Triggers on: generate tests, write tests, testgen, create test file, add test coverage.
install
source · Clone the upstream repo
git clone https://github.com/NeverSight/learn-skills.dev
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/0xdarkmatter/claude-mods/testgen" ~/.claude/skills/neversight-learn-skills-dev-testgen && rm -rf "$T"
manifest:
data/skills-md/0xdarkmatter/claude-mods/testgen/SKILL.mdsource content
TestGen Skill - AI Test Generation
Generate comprehensive tests with automatic framework detection, expert agent routing, and project convention matching.
Architecture
testgen <target> [--type] [--focus] [--depth] │ ├─→ Step 1: Analyze Target │ ├─ File exists? → Read and parse │ ├─ Function specified? → Extract signature │ ├─ Directory? → List source files │ └─ Find existing tests (avoid duplicates) │ ├─→ Step 2: Detect Framework (parallel) │ ├─ package.json → jest/vitest/mocha/cypress/playwright │ ├─ pyproject.toml → pytest/unittest │ ├─ go.mod → go test │ ├─ Cargo.toml → cargo test │ ├─ composer.json → phpunit/pest │ └─ Check existing test patterns │ ├─→ Step 3: Load Project Standards │ ├─ AGENTS.md, CLAUDE.md conventions │ ├─ Existing test file structure │ └─ Naming conventions (*.test.ts vs *.spec.ts) │ ├─→ Step 4: Route to Expert Agent │ ├─ .ts → typescript-expert │ ├─ .tsx/.jsx → react-expert │ ├─ .vue → vue-expert │ ├─ .py → python-expert │ ├─ .go → go-expert │ ├─ .rs → rust-expert │ ├─ .php → laravel-expert │ ├─ E2E/Cypress → cypress-expert │ ├─ Playwright → typescript-expert │ ├─ --visual → Chrome DevTools MCP │ └─ Multi-file → parallel expert dispatch │ ├─→ Step 5: Generate Tests │ ├─ Create test file in correct location │ ├─ Follow detected conventions │ └─ Include: happy path, edge cases, error handling │ └─→ Step 6: Integration ├─ Auto-create task (TaskCreate) for verification └─ Suggest: run tests, /review, /save
Execution Steps
Step 1: Analyze Target
# Check if target exists test -f "$TARGET" && echo "FILE" || test -d "$TARGET" && echo "DIRECTORY" # For function-specific: extract signature command -v ast-grep >/dev/null 2>&1 && ast-grep -p "function $FUNCTION_NAME" "$FILE" # Fallback to ripgrep rg "(?:function|const|def|public|private)\s+$FUNCTION_NAME" "$FILE" -A 10
Check for existing tests:
fd -e test.ts -e spec.ts -e test.js -e spec.js | rg "$BASENAME" fd "test_*.py" | rg "$BASENAME"
Step 2: Detect Framework
JavaScript/TypeScript:
cat package.json 2>/dev/null | jq -r '.devDependencies | keys[]' | grep -E 'jest|vitest|mocha|cypress|playwright|@testing-library'
Python:
grep -E "pytest|unittest|nose" pyproject.toml setup.py requirements*.txt 2>/dev/null
Go:
test -f go.mod && echo "go test available"
Rust:
test -f Cargo.toml && echo "cargo test available"
PHP:
cat composer.json 2>/dev/null | jq -r '.["require-dev"] | keys[]' | grep -E 'phpunit|pest|codeception'
Step 3: Load Project Standards
# Claude Code conventions cat AGENTS.md 2>/dev/null | head -50 cat CLAUDE.md 2>/dev/null | head -50 # Test config files cat jest.config.* vitest.config.* pytest.ini pyproject.toml 2>/dev/null | head -30
Test location conventions:
# JavaScript src/utils/helper.ts → src/utils/__tests__/helper.test.ts # __tests__ folder → src/utils/helper.test.ts # co-located → tests/utils/helper.test.ts # separate tests/ # Python app/utils/helper.py → tests/test_helper.py # tests/ folder → tests/utils/test_helper.py # mirror structure # Go pkg/auth/token.go → pkg/auth/token_test.go # co-located (required) # Rust src/auth.rs → src/auth.rs (mod tests { ... }) # inline tests → tests/auth_test.rs # integration tests
Step 4: Route to Expert Agent
| File Pattern | Primary Expert | Secondary |
|---|---|---|
| typescript-expert | - |
, | react-expert | typescript-expert |
| vue-expert | typescript-expert |
| python-expert | - |
| go-expert | - |
| rust-expert | - |
| laravel-expert | - |
, | cypress-expert | - |
(Playwright) | typescript-expert | - |
, | typescript-expert | - |
, | bash-expert | - |
| (--visual flag) | Chrome DevTools MCP | typescript-expert |
Invoke via Task tool:
Task tool with subagent_type: "[detected]-expert" Prompt includes: - Source file content - Function signatures to test - Detected framework and conventions - Requested test type and focus
Step 5: Generate Tests
Test categories based on --focus:
| Focus | What to Generate |
|---|---|
| Normal input, expected output |
| Boundary values, empty inputs, nulls |
| Invalid inputs, exceptions, error handling |
| All of the above (default) |
Depth levels:
| Depth | Coverage |
|---|---|
| Happy path only, 1-2 tests per function |
| Happy + common edge cases (default) |
| Comprehensive: all paths, mocking, async |
Step 6: Integration
Auto-create task:
TaskCreate: subject: "Run generated tests for src/auth.ts" description: "Verify generated tests pass and review edge cases" activeForm: "Running generated tests for auth.ts"
Suggest next steps:
Tests generated: src/auth.test.ts Next steps: 1. Run tests: npm test src/auth.test.ts 2. Review and refine edge cases 3. Use /save to persist tasks across sessions
Expert Routing Details
TypeScript/JavaScript → typescript-expert
- Proper type imports
- Generic type handling
- Async/await patterns
- Mock typing
React/JSX → react-expert
- React Testing Library patterns
- Component rendering tests
- Hook testing (renderHook)
- Accessibility queries (getByRole)
Vue → vue-expert
- Vue Test Utils patterns
- Composition API testing
- Pinia store mocking
Python → python-expert
- pytest fixtures
- Parametrized tests
- Mock/patch patterns
- Async test handling
Go → go-expert
- Table-driven tests (
pattern)[]struct
and subtests (testing.T
)t.Run- Testify assertions (when detected)
- Benchmark functions (
)testing.B - Parallel tests (
)t.Parallel()
Rust → rust-expert
attribute functions#[test]
module organization#[cfg(test)]
for error testing#[should_panic]- proptest/quickcheck for property testing
PHP/Laravel → laravel-expert
- PHPUnit/Pest patterns
- Database transactions
- Factory usage
E2E → cypress-expert
- Page object patterns
- Custom commands
- Network stubbing
Playwright → typescript-expert
- Page object model patterns
- Locator strategies
- Visual regression testing
CLI Tool Integration
| Tool | Purpose | Fallback |
|---|---|---|
| Parse package.json | Read tool |
| Find existing tests | Grep tool |
| Parse function signatures | ripgrep patterns |
| Find test files | Glob tool |
| Chrome DevTools MCP | Visual testing (--visual) | Playwright/Cypress |
Graceful degradation:
command -v jq >/dev/null 2>&1 && cat package.json | jq '.devDependencies' || cat package.json
Reference Files
For framework-specific code examples, see:
- Complete test examples for all supported languagesframeworks.md
- Chrome DevTools integration for --visual flagvisual-testing.md
Integration
| Command | Relationship |
|---|---|
| Review generated tests before committing |
| Understand complex code before testing |
| Track test coverage goals |