Testing patterns and best practices for writing comprehensive tests. Use when creating unit tests, integration tests, E2E tests, or improving test coverage.
This skill inherits all available tools. When active, it can use any tool Claude has access to.
Use these patterns when writing tests for code changes.
describe('Feature', () => {
it('should do something specific', () => {
// Arrange - Set up test data and conditions
const input = createTestInput();
// Act - Execute the code under test
const result = functionUnderTest(input);
// Assert - Verify the expected outcome
expect(result).toBe(expectedValue);
});
});
[Unit/Feature] should [expected behavior] when [condition]
Examples:
UserService should throw error when email is invalidLoginForm should display error message when credentials are wrongAPI should return 401 when token is expired| Type | Minimum Coverage |
|---|---|
| Unit Tests | 80% line coverage |
| Integration Tests | Critical paths covered |
| E2E Tests | Main user journeys |
it('should handle async operations', async () => {
const result = await asyncFunction();
expect(result).toBeDefined();
});
it('should throw on invalid input', () => {
expect(() => functionUnderTest(null)).toThrow('Invalid input');
});
it('should return user data', async () => {
const response = await request(app)
.get('/api/users/1')
.expect(200);
expect(response.body).toHaveProperty('id', 1);
});
jest.mock('./database');
const mockDb = require('./database');
mockDb.query.mockResolvedValue([{ id: 1 }]);
import { render, screen, fireEvent } from '@testing-library/react';
test('submits form with user data', async () => {
render(<LoginForm />);
fireEvent.change(screen.getByLabelText('Email'), {
target: { value: 'test@example.com' }
});
fireEvent.click(screen.getByRole('button', { name: 'Submit' }));
await screen.findByText('Success');
});
import pytest
def test_function_returns_expected():
result = my_function(input_data)
assert result == expected_output
@pytest.mark.parametrize("input,expected", [
(1, 2),
(2, 4),
(3, 6),
])
def test_multiply_by_two(input, expected):
assert multiply_by_two(input) == expected