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
// 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
// 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
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
// Function testing test('adds numbers correctly', () => { expect(add(2, 3)).toBe(5); });
Component Tests
// 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
// 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:
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:
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
/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