agentleFS
drewdoebereinerdrewdoebereiner/write-unit-tests/SKILL.md

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

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.
  • igorescodroSkill

    write-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

  • CloudflareSkill

    security-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

  • GoogleSkill

    code-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

    1. tldraw/tldraw★ 51ksame name
    2. CrowdDotDev/crowd.dev★ 3.4ksame name
    3. igorescodro/alkaa★ 1.6ksame name
    4. stripe/stripe-android★ 1.6ksame name
    5. razorpay/blade★ 665same name
    6. Endava/BEEQ★ 162same name
    7. emaraschio/cursor-commands★ 9same name
    8. kennguyen887/agent-foundation★ 1same name
    9. cmnemoi/skills★ 0same name
    10. 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
  1. Distinctive:

    Run these before writing a single test:

    line 14
  2. Distinctive:

    Read the changed files to understand the new logic, edge cases, and failure modes.

    line 26
  3. Distinctive:

    Read 1-2 existing test files and the fixture setup to understand:

    line 41

“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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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 diff

Read 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 -10

Read 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 broke

Common Mistakes

MistakeFix
Writing tests before reading the diffRead the diff first to know what you're testing
Ignoring existing test patternsRead 1-2 existing tests and mirror them exactly
Testing implementation detailsTest behavior and outcomes, not internal calls
Patching at the wrong module pathPatch where the name is used, not where it is defined
Not testing the failure pathEvery external call can fail - test that too
Skipping boundary casesEmpty, null, zero, expired, max-length inputs break things

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.