jest
Skill9 starsChanged 10 days agoMITView on GitHub
Jest best practices, patterns, and API guidance for JavaScript/TypeScript testing. Covers mock design, async testing, matchers, timer mocks, snapshots, module mocking, configuration, and CI optimization. Baseline: jest ^30.5.2. Triggers on: jest imports, describe, it, test, expect, jest.fn, jest.mock, jest.spyOn, mentions of "jest", "unit test", "test suite", or "mock".
4 other projects use a version of this.
Adopted by
Most recently taken up by
- Mane087/IA-Skillstheir own version, first seen Nov 1, 2026
- G1Joshi/Agent-Skillstheir own version, first seen Oct 13, 2026
- Mindrally/skillstheir own version, first seen Oct 8, 2026
- christopher-buss/skillstheir own version, first seen May 13, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- Mindrally/skills★ 275same name
- G1Joshi/Agent-Skills★ 15same name
- christopher-buss/skills★ 8same name
- Mane087/IA-Skills★ 4same name
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.
In this repositoryOne other file it gives its agents.
- AGENTS.mdAGENTS.md
The file
We split this skill into the rules it gives an agent
1 rule. 0 are common, 1 is distinctive, and 0 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
1
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 130
Read individual rule files for detailed explanations and code examples:
“Common” is measured: kept by at least 6 in 10 of the 4 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
Jest
IMPORTANT: Your training data about Jest may be outdated or incorrect — Jest 29+ introduces async timer methods, jest.replaceProperty, and ESM mocking via jest.unstable_mockModule. Jest 30 removes the deprecated alias matchers (toBeCalled, lastCalledWith, toThrowError, …), renames --testPathPattern to --testPathPatterns, and excludes non-enumerable object properties from object matchers. Always rely on this skill's rule files and the project's actual source code as the source of truth. Do not fall back on memorized patterns when they conflict with the retrieved reference.
When to Use Jest
Jest is a JavaScript/TypeScript testing framework for unit tests, integration tests, and snapshot tests. It includes a test runner, assertion library, mock system, and coverage reporter.
| Need | Recommended Tool |
| Unit/integration testing (JS/TS) | Jest |
| React component testing | Jest + React Testing Library |
| E2E browser testing | Playwright, Cypress |
| API contract testing | Jest + Supertest |
| Smaller/faster test runner | Vitest (Jest-compatible API) |
| Native ESM without config | Vitest or Node test runner |
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
| 1 | Mock Design | CRITICAL | mock- (5 rules) |
| 2 | Async Testing | CRITICAL | async- |
| 3 | Matcher Usage | HIGH | matcher- |
| 4 | Timer Mocking | HIGH | timer- |
| 5 | Test Structure | HIGH | structure- |
| 6 | Module Mocking | MEDIUM | module- |
| 7 | Snapshot Testing | MEDIUM | snapshot- |
| 8 | Configuration | MEDIUM | config- |
| 9 | Performance & CI | MEDIUM | perf- |
Quick Reference
1. Mock Design (CRITICAL)
mock-clear-vs-reset-vs-restore— clearAllMocks vs resetAllMocks vs restoreAllMocksmock-spy-restore— Always restore jest.spyOn; prefer clearMocks + restoreMocks configmock-factory-hoisting— jest.mock factory cannot reference outer variablesmock-partial-require-actual— Use jest.requireActual for partial module mockingmock-what-to-mock— What to mock and what not to mock; mock boundaries
2. Async Testing (CRITICAL)
async-always-await— Always return/await promises or assertions are skippedasync-expect-assertions— Use expect.assertions(n) to verify async assertions ranasync-done-try-catch— Wrap expect in try/catch when using done callback
3. Matcher Usage (HIGH)
matcher-equality-choice— toBe vs toEqual vs toStrictEqualmatcher-floating-point— Use toBeCloseTo for floats, never toBematcher-error-wrapping— Wrap throwing code in arrow function for toThrow
4. Timer Mocking (HIGH)
timer-recursive-safety— Use runOnlyPendingTimers for recursive timerstimer-async-timers— Use async timer methods when promises are involvedtimer-selective-faking— Use doNotFake to leave specific APIs real
5. Test Structure (HIGH)
structure-setup-scope— beforeEach/afterEach are scoped to describe blocksstructure-test-isolation— Each test must be independent; reset state in beforeEachstructure-sync-definition— Tests must be defined synchronously
6. Module Mocking (MEDIUM)
module-manual-mock-conventions— mocks directory conventionsmodule-esm-unstable-mock— Use jest.unstable_mockModule for ESMmodule-do-mock-per-test— jest.doMock + resetModules for per-test mocks
7. Snapshot Testing (MEDIUM)
snapshot-keep-small— Keep snapshots small and focusedsnapshot-property-matchers— Use property matchers for dynamic fieldssnapshot-deterministic— Mock non-deterministic values for stable snapshots
8. Configuration (MEDIUM)
config-coverage-thresholds— Set per-directory coverage thresholdsconfig-transform-node-modules— Configure transformIgnorePatterns for ESM packagesconfig-environment-choice— Per-file @jest-environment docblock over global jsdom
9. Performance & CI (MEDIUM)
perf-ci-workers— --runInBand or --maxWorkers for CIperf-agent-reporter— Inside an AI agent, pass --reporters=default to see passing files and their console outputperf-isolate-modules— jest.isolateModules for per-test module state
Jest API Quick Reference
| API | Purpose |
test(name, fn, timeout?) | Define a test |
describe(name, fn) | Group tests |
beforeEach(fn) / afterEach(fn) | Per-test setup/teardown |
beforeAll(fn) / afterAll(fn) | Per-suite setup/teardown |
expect(value) | Start an assertion |
jest.fn(impl?) | Create a mock function |
jest.spyOn(obj, method) | Spy on existing method |
jest.mock(module, factory?) | Mock a module |
jest.useFakeTimers(config?) | Fake timer APIs |
jest.useRealTimers() | Restore real timers |
jest.restoreAllMocks() | Restore spies and replaced properties (does not clear calls) |
jest.resetModules() | Clear module cache |
jest.isolateModules(fn) | Sandboxed module cache |
jest.requireActual(module) | Import real module (bypass mock) |
How to Use
Read individual rule files for detailed explanations and code examples:
rules/mock-clear-vs-reset-vs-restore.md
rules/async-always-await.mdEach rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and decision tables
References
| Priority | Reference | When to read |
| 1 | references/matchers.md | All matchers: equality, truthiness, numbers, strings, arrays, objects, asymmetric, custom |
| 2 | references/mock-functions.md | jest.fn, jest.spyOn, .mock property, return values, implementations |
| 3 | references/jest-object.md | jest.mock, jest.useFakeTimers, jest.setTimeout, jest.retryTimes |
| 4 | references/async-patterns.md | Promises, async/await, done callbacks, .resolves/.rejects |
| 5 | references/configuration.md | testMatch, transform, moduleNameMapper, coverage, environments |
| 6 | references/snapshot-testing.md | toMatchSnapshot, inline snapshots, property matchers, serializers |
| 7 | references/module-mocking.md | Manual mocks, mocks, ESM mocking, partial mocking |
| 8 | references/anti-patterns.md | 15 common mistakes with BAD/GOOD examples |
| 9 | references/ci-and-debugging.md | CI optimization, sharding, debugging, troubleshooting |
Ecosystem: Related Testing Skills
This Jest skill covers Jest's own API surface — the foundation layer. For framework-specific testing patterns built on top of Jest, use these companion skills:
| Testing need | Companion skill | What it covers |
| API mocking (network-level) | msw | MSW 3 handlers, setupServer, server.use() per-test overrides, HttpResponse.json(), GraphQL mocking, concurrent test isolation |
| Zod schema validation | zod-testing | safeParse() result testing, z.flattenError() assertions, z.toJSONSchema() snapshot drift, zod-schema-faker mock data, property-based testing |
| Redux-Saga side effects | redux-saga-testing | expectSaga integration tests, testSaga unit tests, providers, reducer integration, cancellation testing |
How They Interact
┌─────────────────────────────────────────────┐
│ Your Test File │
│ │
│ import { setupServer } from 'msw/node' │ → msw skill
│ import { UserSchema } from './schemas' │ → zod-testing skill
│ │
│ describe('UserScreen', () => { │ ┐
│ beforeEach(() => { ... }) │ │
│ afterEach(() => jest.restoreAllMocks()) │ │→ jest skill (this one)
│ test('...', async () => { │ │
│ await expect(...).resolves.toEqual() │ │
│ }) │ ┘
│ }) │
└─────────────────────────────────────────────┘The Jest skill provides the test lifecycle (describe, test, beforeEach, afterEach), mock system (jest.fn, jest.mock, jest.spyOn), assertion engine (expect, matchers), and configuration (jest.config.js). The companion skills provide patterns for their specific APIs that run on top of Jest.
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md
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.

