Test Generator Skill
Auto-suggest tests when you write new code.
When I Activate
- •New function created
- •New component added
- •User mentions testing or tests
- •Test file missing for implementation
- •User asks "can you test this?"
What I Generate
Quick Test Scaffolding
- •Basic happy path tests
- •Null/undefined edge cases
- •Simple error scenarios
- •Framework-appropriate syntax (Jest/Vitest/Pytest)
What I Don't Do
- •Comprehensive test suites → Use @test-engineer sub-agent
- •Integration tests → Use @test-engineer sub-agent
- •E2E test design → Use @test-engineer sub-agent
- •Test strategy planning → Use @test-engineer sub-agent
Relationship with @test-engineer Sub-Agent
Me (Skill): Quick test scaffolding @test-engineer (Sub-Agent): Comprehensive testing strategy
Workflow
- •You write a function
- •I auto-generate basic test structure
- •You want full suite → Invoke @test-engineer sub-agent
- •Sub-agent creates comprehensive tests
Examples
JavaScript Function
javascript
// You write:
function calculateDiscount(price, percentage) {
if (price <= 0) throw new Error("Invalid price");
return price * (percentage / 100);
}
// I auto-generate:
describe("calculateDiscount", () => {
it("calculates discount correctly", () => {
expect(calculateDiscount(100, 10)).toBe(10);
});
it("throws error for invalid price", () => {
expect(() => calculateDiscount(0, 10)).toThrow("Invalid price");
});
it("handles zero percentage", () => {
expect(calculateDiscount(100, 0)).toBe(0);
});
// TODO: Add more edge cases
// Consider: negative percentages, decimal values, very large numbers
});
React Component
jsx
// You write:
function UserCard({ user, onEdit }) {
return (
<div className="user-card">
<h2>{user.name}</h2>
<button onClick={() => onEdit(user.id)}>Edit</button>
</div>
);
}
// I auto-generate:
import { render, screen, fireEvent } from "@testing-library/react";
describe("UserCard", () => {
const mockUser = { id: 1, name: "John Doe" };
const mockOnEdit = jest.fn();
it("renders user name", () => {
render(<UserCard user={mockUser} onEdit={mockOnEdit} />);
expect(screen.getByText("John Doe")).toBeInTheDocument();
});
it("calls onEdit with user id when button clicked", () => {
render(<UserCard user={mockUser} onEdit={mockOnEdit} />);
fireEvent.click(screen.getByText("Edit"));
expect(mockOnEdit).toHaveBeenCalledWith(1);
});
// TODO: Add tests for edge cases
// - Missing user data
// - Undefined onEdit
// - Long names (UI testing)
});
Python Function
python
# You write:
def fetch_user_data(user_id: int) -> dict:
if user_id <= 0:
raise ValueError("Invalid user ID")
return db.query("SELECT * FROM users WHERE id = ?", [user_id])
# I auto-generate:
import pytest
def test_fetch_user_data_success():
"""Test successful user data retrieval"""
result = fetch_user_data(1)
assert isinstance(result, dict)
assert 'id' in result
def test_fetch_user_data_invalid_id():
"""Test with invalid user ID"""
with pytest.raises(ValueError, match="Invalid user ID"):
fetch_user_data(0)
def test_fetch_user_data_negative_id():
"""Test with negative ID"""
with pytest.raises(ValueError):
fetch_user_data(-1)
# TODO: Add integration tests with database
# TODO: Test database connection failures
Framework Detection
I automatically detect your testing framework:
- •JavaScript/TypeScript: Jest, Vitest, Mocha
- •Python: pytest, unittest
- •Java: JUnit
- •Go: testing package
Detection based on:
- •package.json dependencies
- •requirements.txt
- •Existing test files
- •Import statements
Test Patterns
Unit Tests
javascript
// Function testing
test("adds numbers correctly", () => {
expect(add(2, 3)).toBe(5);
});
Component Tests
jsx
// React component testing
test("button click triggers callback", () => {
const onClick = jest.fn();
render(<Button onClick={onClick} />);
fireEvent.click(screen.getByRole("button"));
expect(onClick).toHaveBeenCalled();
});
Edge Cases
javascript
// Boundary testing
test("handles empty input", () => {
expect(processData([])).toEqual([]);
});
test("handles null input", () => {
expect(processData(null)).toBeNull();
});
When to Use Sub-Agent
Invoke @test-engineer for:
- •Complete test suites (20+ tests)
- •Integration test strategy
- •E2E test planning
- •Test coverage goals
- •Complex mocking scenarios
Example:
code
Me: "Generated 3 basic tests for calculateDiscount()" You: "@test-engineer create comprehensive test suite with all edge cases" Sub-agent: [Creates 25+ tests covering all scenarios]
Sandboxing Compatibility
Works without sandboxing: ✅ Yes Works with sandboxing: ✅ Yes
- •Filesystem: Writes test files to project
- •Network: None required
- •Configuration: None required
Customization
Edit test templates:
bash
cp -r ~/.claude/skills/development/test-generator \
~/.claude/skills/development/my-test-generator
# Edit SKILL.md to customize:
# - Test patterns
# - Framework preferences
# - Coverage expectations
Integration with Commands
/test-gen Command
bash
/test-gen --file utils.js --framework jest --coverage 90 # Combines: # 1. My quick scaffolding # 2. @test-engineer comprehensive tests # 3. Full test file generation
Tips
- •Let me scaffold first - Review before invoking sub-agent
- •Add TODOs - I include TODO comments for complex cases
- •Framework consistency - I match your project's testing style
- •Quick iteration - Regenerate if not satisfied
Related Tools
- •@test-engineer: Comprehensive test suite creation
- •code-reviewer skill: Flags code that needs testing
- •/test-gen command: Full test generation workflow