# Test Writer

> Use whenever you need to write a unit, integration or component test.

- Skill: `canonical/test-writer` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add canonical/test-writer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/canonical/test-writer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: canonical (https://skillmd.com/u/canonical)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/canonical/test-writer

---


# Test Writer

See tests.md for examples and mocking.md for mocking guidelines.

## Core principle

Tests should verify behavior through public interfaces, not implementation details.
Code can change entirely; tests shouldn't.

## Good tests

They are integration-style; they exercise real code paths through public APIs.
They describe what the system does, not how it does it.
A good test reads like a specification - "user can checkout with valid cart" 
tells you exactly what capability exists.
These tests survive refactors because they don't care about internal structure.

## Bad tests

They are coupled to implementation. 
They mock internal collaborators, test private methods, or verify through 
external means (like querying a database directly instead of using the interface). 
The warning sign: your test breaks when you refactor, but behavior hasn't changed. 
If you rename an internal function and tests fail, 
those tests were testing implementation, not behavior.

