Unit Test Generator
Generate comprehensive unit tests with edge cases, mocks, and full coverage for your code.
Prompt Template
You are a QA engineer who specializes in writing thorough, maintainable unit tests. Generate comprehensive tests for the following code. **Language/Framework:** [e.g., TypeScript/Jest, Python/pytest] **Testing framework:** [Jest / Vitest / pytest / etc.] **Code to test:** ``` [paste your code here] ``` **What it does:** [brief description] **External dependencies:** [APIs, databases, file system, etc. that need mocking] Generate tests covering: 1. **Happy path** — normal expected usage (2-3 tests) 2. **Edge cases** — empty inputs, boundary values, null/undefined, max values 3. **Error cases** — invalid inputs, network failures, timeout scenarios 4. **Integration points** — mock external dependencies properly 5. **Type-specific** — type coercion issues (JS), None checks (Python), etc. For each test: - Use descriptive test names: `it('should return empty array when no items match filter')` - Follow AAA pattern: Arrange, Act, Assert - One assertion per test where practical - Include setup/teardown if needed Also provide: - Mock setup for external dependencies - Test data factory/fixtures - Coverage analysis: which lines/branches are covered vs. missing - Suggested edge cases I might not have considered
Example Output
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { UserService } from './user-service';
import { db } from './database';
vi.mock('./database');
describe('UserService', () => {
let service: UserService;
beforeEach(() => {
service = new UserService();
vi.clearAllMocks();
});
describe('findByEmail', () => {
it('should return user when email exists', async () => {
const mockUser = { id: '1', email: 'test@example.com', name: 'Test' };
vi.mocked(db.users.findFirst).mockResolvedValue(mockUser);
const result = await service.findByEmail('test@example.com');
expect(result).toEqual(mockUser);
expect(db.users.findFirst).toHaveBeenCalledWith({
where: { email: 'test@example.com' },
});
});
it('should return null when email does not exist', async () => {
vi.mocked(db.users.findFirst).mockResolvedValue(null);
const result = await service.findByEmail('nonexistent@example.com');
expect(result).toBeNull();
});
it('should throw on invalid email format', async () => {
await expect(service.findByEmail('not-an-email')).rejects.toThrow(
'Invalid email format'
);
});
});
});
Tips for Best Results
- 💡Include the full function with its imports so the AI knows what to mock
- 💡Mention any existing test utilities or factories in your codebase
- 💡Ask for property-based tests (fast-check/hypothesis) for complex logic
- 💡Request mutation testing suggestions to verify test quality
Frequently Asked Questions
What is the Unit Test Generator prompt?
Generate comprehensive unit tests with edge cases, mocks, and full coverage for your code. It's a free ChatGPT prompt template from our Coding collection — copy it, fill in the bracketed variables, and paste it into your AI tool.
Which AI tools work with this prompt?
It's written and tested for ChatGPT, Claude and Gemini. Any AI assistant that accepts free-form text prompts will handle it well.
How do I customize this ChatGPT prompt?
Replace the bracketed variables — such as [e.g., TypeScript/Jest, Python/pytest], [Jest / Vitest / pytest / etc.], [paste your code here] — with your own details before running it. Include the full function with its imports so the AI knows what to mock
Is this prompt free to use?
Yes. Every prompt on PromptAtlas is free to copy, customize, and use — no signup required.
Related Prompts
Python FileNotFoundError Debugging Prompt
Debug Python FileNotFoundError from the exact traceback, resolved path, working directory, filesystem context, deployment environment, and failing operation.
Python ZeroDivisionError Debugging Prompt
Debug Python ZeroDivisionError from the exact traceback, operand values and types, data path, numeric semantics, runtime context, and failing input.
Python IndentationError Debugging Prompt
Debug Python IndentationError from the exact parser message, whitespace, block structure, source bytes, formatter settings, and runtime version.
Python SyntaxError: Invalid Syntax Debugging Prompt
Debug Python SyntaxError invalid syntax from the exact parser location, surrounding tokens, Python version, generated code, execution context, and minimal reproduction.
Python AttributeError: Object Has No Attribute Debugging Prompt
Debug Python AttributeError from the exact traceback, runtime object type, attribute contract, construction path, version, imports, and minimal reproduction.
Python UnboundLocalError Debugging Prompt
Debug Python UnboundLocalError from the exact traceback, binding scope, assignments, branches, closures, imports, runtime path, and minimal reproduction.