write-unit-tests
Skill0 starsChanged 7 months agoMITView on GitHub
Use when writing unit tests for any feature or change - discovers the test framework and patterns from the codebase, uses git diffs to identify what needs coverage
11 other projects use a version of this.
Adopted by
Most recently taken up by
- stripe/stripe-androidtheir own version, first seen Nov 5, 2026
- Endava/BEEQtheir own version, first seen Oct 8, 2026
- CrowdDotDev/crowd.devtheir own version, first seen Oct 8, 2026
- razorpay/bladetheir own version, first seen Oct 8, 2026
- igorescodro/alkaatheir own version, first seen Oct 8, 2026
- tldraw/tldrawtheir own version, first seen Oct 8, 2026
Used with
Projects with it also use write-e2e-tests, security-audit and 1 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
igorescodroSkillwrite-e2e-tests
Use when writing or modifying end-to-end tests in the Alkaa project — triggers on tasks like "add an E2E test", "write a flow test", "test this feature end-to-end", "add a test to shared module", or "cover this user journey with a test".
Also in 3 projects that use this
CloudflareSkillsecurity-audit
Security guidance and vulnerability review for codebases, APIs, services, CLI tools, libraries, and daemons. Use for security questions, focused reviews, vulnerability research, security audits, or pen tests. Run the complete workflow only for explicit codebase audit or pen-test requests, full/comprehensive/end-to-end reviews, or requested report artifacts.
Also in 3 projects that use this
GoogleSkillcode-review
Adversarial systems, concurrency, memory-model, and architecture code review protocol. Use this skill whenever asked to review code, PRs, diffs, or branches in Filament.
Also in 3 projects that use this
Other versions11 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 11
- tldraw/tldraw★ 51ksame name
- CrowdDotDev/crowd.dev★ 3.4ksame name
- igorescodro/alkaa★ 1.6ksame name
- stripe/stripe-android★ 1.6ksame name
- razorpay/blade★ 665same name
- Endava/BEEQ★ 162same name
- emaraschio/cursor-commands★ 9same name
- kennguyen887/agent-foundation★ 1same name
- cmnemoi/skills★ 0same name
- gologo13/agent-skills★ 0same name
1 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 3 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 10 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Run these before writing a single test:
- Distinctive: line 26
Read the changed files to understand the new logic, edge cases, and failure modes.
- Distinctive: line 41
Read 1-2 existing test files and the fixture setup to understand:
“Common” is measured: kept by at least 6 in 10 of the 10 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Writing Unit Tests
Overview
Discover context from the codebase first, then write tests that match existing patterns. Never assume the stack - read it.
Step 1: Discover What Needs Testing
Run these before writing a single test:
# See what changed
git diff HEAD~1 --stat
git diff HEAD~1 -- <relevant files>
# Or for staged/unstaged changes
git diff --cached
git diffRead the changed files to understand the new logic, edge cases, and failure modes.
Step 2: Discover the Test Setup
# Find test framework config
ls pytest.ini pyproject.toml setup.cfg jest.config.* vitest.config.* package.json 2>/dev/null
# Find existing tests
find . -name "test_*.py" -o -name "*_test.py" -o -name "*.test.ts" -o -name "*.spec.ts" | head -20
# Find fixtures/helpers
find . -name "conftest.py" -o -name "fixtures.*" -o -name "helpers.*" | head -10Read 1-2 existing test files and the fixture setup to understand:
- Naming conventions
- How test data is built (factories, fixtures, inline)
- How external dependencies are mocked
- How the test client / runner is set up
- Assertion style
Step 3: Identify Coverage Gaps
For each changed function/method/endpoint, ask:
- Happy path covered?
- What are the distinct failure modes? (bad input, missing auth, dependency down, edge cases)
- What invariants must hold regardless of input?
- Are there boundary conditions (empty, zero, max, expired)?
Step 4: Write Tests That Match Existing Patterns
Mirror the style of existing tests exactly:
- Same import structure
- Same fixture usage
- Same factory/builder pattern for test data
- Same assertion style
- Same file location and naming
Class-based grouping (if existing tests use it):
class Test<Feature>:
def test_<happy_path>(self): ...
def test_<error_case>(self): ...Flat functions (if existing tests use it):
def test_<feature>_<scenario>(): ...Coverage Checklist
For any changed code, write tests for:
- Expected output for valid input
- Each distinct error/exception path
- Auth/permission failures (if applicable)
- External dependency failures (network down, DB error)
- Boundary values (empty string, zero, null, expired timestamps)
- Any logic branch not covered by the above
Running Tests
Discover the command from config, then run:
# Python
pytest # all
pytest path/to/test_file.py # one file
pytest -k "test_name" # by pattern
# Node
npm test
npx vitest
npx jest
# Verify new tests pass and nothing else brokeCommon Mistakes
| Mistake | Fix |
| Writing tests before reading the diff | Read the diff first to know what you're testing |
| Ignoring existing test patterns | Read 1-2 existing tests and mirror them exactly |
| Testing implementation details | Test behavior and outcomes, not internal calls |
| Patching at the wrong module path | Patch where the name is used, not where it is defined |
| Not testing the failure path | Every external call can fail - test that too |
| Skipping boundary cases | Empty, null, zero, expired, max-length inputs break things |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

