mcpField
T
testgen

testgen

github.com/0xdarkmatterTesting & quality7857 installsUpdated 2w ago
Repository

About testgen

testgen is a test-generation skill for developers who want tests tailored to a project’s language and conventions. It analyzes targets, detects testing frameworks, and routes work by file type, including support for end-to-end tests.

Key features

  1. 01Analyze targets and check for existing tests
  2. 02Detect project frameworks and conventions
  3. 03Route generation by file type
  4. 04Choose test focus and coverage depth
  5. 05Support multiple languages and end-to-end tests
  6. 06Use Chrome DevTools MCP in visual mode

Use cases

  1. 01Generate tests for a function or file
  2. 02Add test coverage to a project directory
  3. 03Follow existing project testing conventions
  4. 04Test interfaces in visual mode

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/0xdarkmatter/claude-mods --skill testgen

After installing, type/testgenin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

frameworks.md
visual-testing.md
assets/
.gitkeep
references/
.gitkeep
scripts/
.gitkeep

Details

From the project README

TestGen Skill - AI Test Generation

Generate comprehensive tests with automatic framework detection, skill-preloaded general-purpose dispatch, 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 Test Generator (general-purpose + skill preload)
    │     ├─ .ts → general-purpose, preload typescript-ops
    │     ├─ .tsx/.jsx → general-purpose, preload react-ops
    │     ├─ .vue → general-purpose, preload vue-ops
    │     ├─ .py → general-purpose, preload python-pytest-ops
    │     ├─ .go → general-purpose, preload go-ops
    │     ├─ .rs → general-purpose, preload rust-ops
    │     ├─ .php → general-purpose, preload laravel-ops
    │     ├─ E2E/Cypress → general-purpose, preload cypress-ops
    │     ├─ Playwright → general-purpose, preload typescript-ops
    │     ├─ Shell/bash → general-purpose, preload bash-ops
    │     ├─ --visual → Chrome DevTools MCP
    │     └─ Multi-file → parallel general-purpose 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 Test Generator

Dispatch is skills-first: the generic general-purpose subagent preloads the relevant -ops skill before generating tests.

File PatternDispatchPreload
*.tsgeneral-purposeskills/typescript-ops/SKILL.md
*.tsx, *.jsxgeneral-purposeskills/react-ops/SKILL.md + skills/typescript-ops/SKILL.md
*.vuegeneral-purposeskills/vue-ops/SKILL.md + skills/typescript-ops/SKILL.md
*.pygeneral-purposeskills/python-pytest-ops/SKILL.md
*.gogeneral-purposeskills/go-ops/SKILL.md
*.rsgeneral-purposeskills/rust-ops/SKILL.md
*.phpgeneral-purposeskills/laravel-ops/SKILL.md
*.cy.ts, cypress/*general-purposeskills/cypress-ops/SKILL.md + skills/typescript-ops/SKILL.md
*.spec.ts (Playwright)general-purposeskills/playwright-ops/SKILL.md + skills/typescript-ops/SKILL.md
playwright/*, e2e/*general-purposeskills/playwright-ops/SKILL.md + skills/typescript-ops/SKILL.md
*.sh, *.bashgeneral-purposeskills/bash-ops/SKILL.md
(--visual flag)Chrome DevTools MCPskills/typescript-ops/SKILL.md

Invoke via the Agent tool:

Agent tool with subagent_type: "general-purpose" (or surviving specialist from table)
model: "sonnet"
Prompt includes:
  - Skill preloading (domain knowledge):
    "First, read these files for testing context:
     - Read: skills/security-ops/references/owasp-top10-a01-a05.md
     - Read: skills/security-ops/references/owasp-top10-a06-a10.md
     - Read: skills/testing-ops/SKILL.md
     - Read: [Preload column for the matched file pattern]"
  - Source file content
  - Function signatures to test
  - Detected framework and conventions
  - Requested test type and focus

Language-specific preloads (append to the preloading section above):

LanguageAdditional PreloadWhy
Pythonskills/python-pytest-ops/SKILL.mdFixtures, marks, parametrize, async testing
Goskills/go-ops/SKILL.mdTable-driven tests, benchmarks, testify
Rustskills/rust-ops/SKILL.mdProperty testing, criterion, proptest
Step 5: Generate Tests

Test categories based on --focus:

FocusWhat to Generate
happyNormal input, expected output
edgeBoundary values, empty inputs, nulls
errorInvalid inputs, exceptions, error handling
allAll of the above (default)

Depth levels:

DepthCoverage
quickHappy path only, 1-2 tests per function
normalHappy + common edge cases (default)
thoroughComprehensive: 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

Routing Details

TypeScript/JavaScript (preload typescript-ops)
  • Proper type imports
  • Generic type handling
  • Async/await patterns
  • Mock typing
React/JSX (preload react-ops)
  • React Testing Library patterns
  • Component rendering tests
  • Hook testing (renderHook)
  • Accessibility queries (getByRole)
Vue (preload vue-ops)
  • Vue Test Utils patterns
  • Composition API testing
  • Pinia store mocking
Python (preload python-pytest-ops)
  • pytest fixtures
  • Parametrized tests
  • Mock/patch patterns
  • Async test handling
Go (preload go-ops)
  • Table-driven tests ([]struct pattern)
  • testing.T and subtests (t.Run)
  • Testify assertions (when detected)
  • Benchmark functions (testing.B)
  • Parallel tests (t.Parallel())
Rust (preload rust-ops)
  • #[test] attribute functions
  • #[cfg(test)] module organization
  • #[should_panic] for error testing
  • proptest/quickcheck for property testing
PHP/Laravel (preload laravel-ops)
  • PHPUnit/Pest patterns
  • Database transactions
  • Factory usage
E2E/Cypress (preload cypress-ops)
  • Page object patterns
  • Custom commands
  • Network stubbing
Shell/bash (preload bash-ops)
  • bats / shunit2 patterns
  • Stubbing external commands
  • Exit-code and stderr assertions
Playwright (preload typescript-ops)
  • Page object model patterns
  • Locator strategies
  • Visual regression testing

CLI Tool Integration

ToolPurposeFallback
jqParse package.jsonRead tool
rgFind existing testsGrep tool
ast-grepParse function signaturesripgrep patterns
fdFind test filesGlob tool
Chrome DevTools MCPVisual 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:

  • frameworks.md - Complete test examples for all supported languages
  • visual-testing.md - Chrome DevTools integration for --visual flag

Integration

CommandRelationship
/reviewReview generated tests before committing
/explainUnderstand complex code before testing
/saveTrack test coverage goals

Comments

Markdown supported