# Testing

> Skill: testing

- Skill: `lofcz/testing-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lofcz/testing-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lofcz/testing-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: lofcz (https://skillmd.com/u/lofcz)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/lofcz/testing-2

---


## Testing Goal

Keep tests in three buckets only:

- Pure unit tests for deterministic logic.
- Thin component or hook contract tests for real app behavior.
- Golden input or output tests when serialized output is the contract.

Hard constraints:

- Prefer Bun for the fast local loop.
- Keep the default suite fast.
- No browser or e2e coverage unless the app behavior truly needs it.
- Coverage is a hotspot tool, not a vanity score.

## Core Rules

- Assert public behavior, not implementation detail.
- Keep tests next to the code they cover with `*.spec.ts[x]`.
- Keep helpers local. Do not import one spec from another.
- Prefer explicit assertions over snapshots.
- Delete skipped, commented, or placeholder tests instead of babysitting them.

## Seam Selection

- Use plain function tests for pure logic.
- Use rendered React tests for hooks, components, rerender behavior, and DOM behavior.
- Use browser checks only when the contract is actually browser-specific.

## Fixtures And Assertions

- Keep fixtures small.
- Use plain objects for simple state.
- Use `it.each` for small behavior matrices.
- In Bun + Testing Library, prefer render-returned queries over `screen`.
- Use direct style-property assertions instead of `toHaveStyle`.
- Use snapshots only when serialized output is the contract and inline assertions would be worse.

## Quick Reference

- Keep tests fast and local.
- Start with the smallest seam that proves the behavior.
- Prefer explicit assertions.
- Browser checks are for real UI behavior, not lazy coverage.

