About test-writer
A testing skill for developers writing unit, integration, and end-to-end tests. It guides test selection, AAA-structured cases, edge-case coverage, and fixtures or mocks.
Key features
- 01Write unit, integration, and E2E tests
- 02Choose a test type for the code
- 03Structure cases with Arrange, Act, Assert
- 04Cover boundaries and error paths
- 05Create fixtures and mock data
Use cases
- 01Test a function or class in isolation
- 02Check API and database interactions
- 03Verify an end-to-end user workflow
- 04Exercise edge cases and failures
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ partme-ai/ full-stack-skills --skill test-writerAfter installing, type/test-writerin Claude Code to confirm it loaded.
Details
From the project READMEWhen to use this skill
Use this skill whenever the user wants to:
- Write unit tests for functions, classes, or modules
- Create integration tests for API endpoints or database interactions
- Build end-to-end tests for user workflows
- Add test coverage for edge cases and error paths
- Set up a testing framework (pytest, Jest, JUnit, Vitest, Playwright)
- Generate test fixtures and mock data
How to use this skill
Workflow
- Identify the code under test - Read the function/class/module to understand its behavior
- Choose the test type - Unit (isolated), integration (multi-component), or E2E (full flow)
- Write tests using AAA pattern - Arrange inputs, Act on the function, Assert expected results
- Cover edge cases - Empty inputs, boundary values, error conditions, concurrent access
Unit Test Example (pytest)
import pytest
from decimal import Decimal
from orders import calculate_order_total, OrderItem
class TestCalculateOrderTotal:
def test_single_item_no_discount(self):
items = [OrderItem(price=Decimal("10.00"), quantity=2)]
result = calculate_order_total(items, discount_pct=0.0, tax_rate=0.08)
assert result == Decimal("21.60")
def test_applies_discount_before_tax(self):
items = [OrderItem(price=Decimal("100.00"), quantity=1)]
result = calculate_order_total(items, discount_pct=0.1, tax_rate=0.10)
assert result == Decimal("99.00")
def test_empty_items_returns_zero(self):
result = calculate_order_total([], discount_pct=0.0, tax_rate=0.08)
assert result == Decimal("0.00")
def test_invalid_discount_raises_error(self):
items = [OrderItem(price=Decimal("10.00"), quantity=1)]
with pytest.raises(ValueError, match="discount_pct must be 0-1"):
calculate_order_total(items, discount_pct=1.5)
Integration Test Example (Jest + Supertest)
import request from 'supertest';
import { app } from '../src/app';
import { db } from '../src/database';
describe('POST /api/users', () => {
afterEach(async () => { await db.query('DELETE FROM users WHERE email LIKE $1', ['%@test.com']); });
it('creates a user and returns 201', async () => {
const res = await request(app)
.post('/api/users')
.send({ name: 'Alice', email: '[email protected]' })
.expect(201);
expect(res.body).toMatchObject({ name: 'Alice', email: '[email protected]' });
});
it('returns 400 for missing email', async () => {
await request(app).post('/api/users').send({ name: 'Bob' }).expect(400);
});
});
Best Practices
- One assertion per behavior - Each test should verify one specific behavior
- Descriptive test names - Name tests as
test_<behavior>_when_<condition>orit('should <outcome> when <input>') - Isolate dependencies - Use mocks/stubs for external services, databases, and APIs
- Test the contract, not the implementation - Assert on outputs and side effects, not internal state
- Run tests in CI - Ensure tests pass on every commit; aim for 80%+ line coverage on critical paths
Keywords
测试编写, test writing, unit test, integration test, e2e test, pytest, Jest, JUnit, Vitest, Playwright, mock, fixture, 单元测试, 集成测试, 端到端测试, test coverage
Comments
Markdown supported