Files
leo-claude-mktplace/plugins/projman/commands/test-gen.md
lmiranda 23537158bc feat(projman): add /test-gen command for test generation
Adds test generation command that complements existing /test-check:
- Auto-detects test framework (pytest, jest, vitest, go test, etc.)
- Generates unit, integration, e2e, or snapshot tests
- Creates happy path, edge case, and error tests
- Supports multiple languages (Python, JavaScript, Go, etc.)
- Integrates with /test-check for generate-then-verify workflow

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:33:22 -05:00

119 lines
3.2 KiB
Markdown

---
description: Generate tests for specified code - creates unit, integration, or e2e tests
---
# Test Generation
Generate comprehensive tests for specified code.
## Usage
```
/test-gen <target> [--type=<type>] [--framework=<framework>]
```
**Target:** File path, function name, class name, or module
**Type:** unit (default), integration, e2e, snapshot
**Framework:** Auto-detected or specify (pytest, jest, vitest, go test, etc.)
## Process
1. **Analyze Target Code**
- Parse function/class signatures
- Identify dependencies and side effects
- Map input types and return types
- Find edge cases from logic branches
2. **Determine Test Strategy**
| Code Pattern | Test Approach |
|--------------|---------------|
| Pure function | Unit tests with varied inputs |
| Class with state | Setup/teardown, state transitions |
| External calls | Mocks/stubs for dependencies |
| Database ops | Integration tests with fixtures |
| API endpoints | Request/response tests |
| UI components | Snapshot + interaction tests |
3. **Generate Tests**
For each target function/method:
- Happy path test (expected inputs → expected output)
- Edge cases (empty, null, boundary values)
- Error cases (invalid inputs → expected errors)
- Type variations (if dynamic typing)
4. **Test Structure**
```python
# Example output for Python/pytest
import pytest
from module import target_function
class TestTargetFunction:
"""Tests for target_function."""
def test_happy_path(self):
"""Standard input produces expected output."""
result = target_function(valid_input)
assert result == expected_output
def test_empty_input(self):
"""Empty input handled gracefully."""
result = target_function("")
assert result == default_value
def test_invalid_input_raises(self):
"""Invalid input raises ValueError."""
with pytest.raises(ValueError):
target_function(invalid_input)
@pytest.mark.parametrize("input,expected", [
(case1_in, case1_out),
(case2_in, case2_out),
])
def test_variations(self, input, expected):
"""Multiple input variations."""
assert target_function(input) == expected
```
5. **Output**
```
## Tests Generated
### Target: src/orders.py:calculate_total
### File Created: tests/test_orders.py
### Tests (6 total)
- test_calculate_total_happy_path
- test_calculate_total_empty_items
- test_calculate_total_negative_price_raises
- test_calculate_total_with_discount
- test_calculate_total_with_tax
- test_calculate_total_parametrized_cases
### Coverage Estimate
- Line coverage: ~85%
- Branch coverage: ~70%
### Run Tests
pytest tests/test_orders.py -v
```
## Framework Detection
| Files Present | Framework Used |
|---------------|----------------|
| pytest.ini, conftest.py | pytest |
| jest.config.* | jest |
| vitest.config.* | vitest |
| *_test.go | go test |
| Cargo.toml | cargo test |
| mix.exs | ExUnit |
## Integration with /test-check
- `/test-gen` creates new tests
- `/test-check` verifies tests pass
- Typical flow: `/test-gen src/new_module.py` → `/test-check`