test-generator
Generate comprehensive unit tests for code. Use when creating tests, improving test coverage, or setting up testing frameworks.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Test Generator
Version: 1.0.0 Purpose: Generate comprehensive tests with high coverage
Triggers
| Trigger | Examples |
|---|---|
| Test creation | "write tests", "テスト作成", "add unit tests" |
| Coverage | "improve coverage", "カバレッジ向上" |
| TDD | "test first", "TDDで" |
Testing Stack
| Framework | Purpose |
|---|---|
| Vitest | Unit/Integration tests |
| Playwright | E2E tests |
| Testing Library | Component tests |
Test Structure (AAA Pattern)
describe('functionName', () => {
it('should [expected behavior] when [condition]', () => {
// Arrange
const input = createTestInput();
// Act
const result = functionName(input);
// Assert
expect(result).toBe(expectedValue);
});
});
Test Categories
1. Happy Path
it('should return sum when given valid numbers', () => {
expect(add(2, 3)).toBe(5);
});
2. Edge Cases
it('should handle empty array', () => {
expect(sum([])).toBe(0);
});
it('should handle single element', () => {
expect(sum([5])).toBe(5);
});
it('should handle negative numbers', () => {
expect(sum([-1, 1])).toBe(0);
});
3. Error Cases
it('should throw on invalid input', () => {
expect(() => divide(10, 0)).toThrow('Division by zero');
});
it('should throw on null input', () => {
expect(() => process(null)).toThrow(TypeError);
});
4. Async Tests
it('should fetch user data', async () => {
const user = await fetchUser(1);
expect(user.name).toBe('John');
});
it('should handle API errors', async () => {
await expect(fetchUser(-1)).rejects.toThrow('Not found');
});
Mocking
Mock Functions
import { vi } from 'vitest';
const mockFn = vi.fn();
mockFn.mockReturnValue(42);
mockFn.mockResolvedValue({ data: 'test' });
Mock Modules
vi.mock('./database', () => ({
query: vi.fn().mockResolvedValue([{ id: 1 }]),
}));
Spies
const spy = vi.spyOn(console, 'log');
doSomething();
expect(spy).toHaveBeenCalledWith('expected message');
Coverage Requirements
| Metric | Target |
|---|---|
| Statements | 80% |
| Branches | 80% |
| Functions | 80% |
| Lines | 80% |
# Run with coverage
npm test -- --coverage
Test File Naming
src/
├── utils/
│ ├── helper.ts
│ └── helper.test.ts # Co-located
└── __tests__/
└── integration.test.ts # Integration tests
Template
import { describe, it, expect, beforeEach, vi } from 'vitest';
import { functionName } from './module';
describe('functionName', () => {
beforeEach(() => {
vi.clearAllMocks();
});
describe('when input is valid', () => {
it('should return expected result', () => {
// Arrange
const input = { /* ... */ };
// Act
const result = functionName(input);
// Assert
expect(result).toEqual(expected);
});
});
describe('when input is invalid', () => {
it('should throw error', () => {
expect(() => functionName(null)).toThrow();
});
});
describe('edge cases', () => {
it.each([
[[], 0],
[[1], 1],
[[1, 2], 3],
])('sum(%j) = %i', (input, expected) => {
expect(sum(input)).toBe(expected);
});
});
});
Checklist
- All public functions have tests
- Happy path covered
- Edge cases covered
- Error cases covered
- Async behavior tested
- Mocks properly cleaned up
- Coverage meets threshold
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-26
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!