CtrlK
BlogDocsLog inGet started
Tessl Logo

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 with Tessl CLI

npx tessl i github:NeverSight/skills_feed --skill testgen
What are skills?

90

Does it follow best practices?

Validation for skill structure

SKILL.md
Review
Evals

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 PatternPrimary ExpertSecondary
*.tstypescript-expert-
*.tsx, *.jsxreact-experttypescript-expert
*.vuevue-experttypescript-expert
*.pypython-expert-
*.gogo-expert-
*.rsrust-expert-
*.phplaravel-expert-
*.cy.ts, cypress/*cypress-expert-
*.spec.ts (Playwright)typescript-expert-
playwright/*, e2e/*typescript-expert-
*.sh, *.bashbash-expert-
(--visual flag)Chrome DevTools MCPtypescript-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:

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

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 ([]struct pattern)
  • testing.T and subtests (t.Run)
  • Testify assertions (when detected)
  • Benchmark functions (testing.B)
  • Parallel tests (t.Parallel())

Rust → rust-expert

  • #[test] attribute functions
  • #[cfg(test)] module organization
  • #[should_panic] for error testing
  • 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

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
Repository
NeverSight/skills_feed
Last updated
Created

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.