| name | testgen |
| description | Generate tests using AI and run test suites. Use for generating unit tests, running coverage reports, and mutation testing. |
Test Generator
AI-powered test generation and test suite management.
Prerequisites
pip install google-generativeai
export GEMINI_API_KEY=your_api_key
npm install -D jest vitest mocha
npm install -D @stryker-mutator/core
AI Test Generation
Generate Unit Tests
CODE=$(cat src/utils.ts)
gemini -m pro -o text -e "" "Generate comprehensive unit tests for this code:
$CODE
Requirements:
1. Use Jest/Vitest syntax
2. Cover happy path, edge cases, and error conditions
3. Include descriptive test names
4. Mock external dependencies
5. Test each exported function
Output only the test code, ready to save to a file."
Generate Tests for Specific Function
gemini -m pro -o text -e "" "Generate unit tests for this function:
\`\`\`typescript
export function calculateDiscount(price: number, percentage: number): number {
if (percentage < 0 || percentage > 100) {
throw new Error('Invalid percentage');
}
return price * (1 - percentage / 100);
}
\`\`\`
Include tests for:
- Valid inputs
- Boundary values (0%, 100%)
- Invalid inputs (negative, >100)
- Edge cases (zero price)
Use Jest syntax."
TDD Loop
gemini -m pro -o text -e "" "Write a failing test for: [feature description]"
npm test -- --watch
Test Runners
Jest
npx jest
npx jest --watch
npx jest src/utils.test.ts
npx jest --coverage
npx jest -u
npx jest --verbose
npx jest -t "should calculate"
Vitest
npx vitest
npx vitest --watch
npx vitest run
npx vitest --coverage
npx vitest --ui
npx vitest src/utils.test.ts
Mocha
npx mocha
npx mocha --watch
npx mocha test/utils.test.js
npx mocha --reporter spec
Coverage Analysis
Generate Coverage Report
npx jest --coverage --coverageReporters=text --coverageReporters=html
npx vitest run --coverage
open coverage/index.html
Coverage Thresholds
{
"coverageThreshold": {
"global": {
"branches": 80,
"functions": 80,
"lines": 80,
"statements": 80
}
}
}
Find Uncovered Code
npx jest --coverage --coverageReporters=text
UNCOVERED=$(npx jest --coverage --coverageReporters=json --silent | jq '.coverageMap')
gemini -m pro -o text -e "" "Given this coverage report, suggest tests for uncovered code:
$UNCOVERED"
Mutation Testing
Test the tests themselves using Stryker:
npx stryker --version
npx stryker init
npx stryker run
npx stryker run --reporters clear-text,json,html
Interpret Results
- Killed mutants: Tests caught the bug (good)
- Survived mutants: Tests missed the bug (need more tests)
- Timeout mutants: Mutant caused infinite loop
- No coverage: Code not covered by any test
Workflow Patterns
New Feature Testing
CODE=$(cat src/new-feature.ts)
gemini -m pro -o text -e "" "Generate test file scaffold for: $CODE" > src/new-feature.test.ts
npx jest src/new-feature.test.ts
npx jest src/new-feature.test.ts --coverage
Regression Test Generation
BUG_DESC="Users could submit empty forms"
FIX=$(git diff HEAD~1)
gemini -m pro -o text -e "" "Generate a regression test for this bug fix:
Bug: $BUG_DESC
Fix:
$FIX
The test should fail if the bug is reintroduced."
Integration Test Generation
gemini -m pro -o text -e "" "Generate integration tests for this API endpoint:
\`\`\`typescript
// POST /api/users
// Body: { name: string, email: string }
// Response: { id: string, name: string, email: string }
\`\`\`
Include:
- Success case
- Validation errors
- Duplicate email handling
- Authentication required
Use supertest or similar."
Best Practices
- Test behavior, not implementation - Focus on what, not how
- One assertion per test - When practical
- Descriptive names - Should document what's tested
- Arrange-Act-Assert - Clear test structure
- Mock external deps - Isolate unit under test
- Run tests in CI - Automated verification
- Maintain coverage - Don't let it drop
- Use mutation testing - Verify test quality