hook-test
Skill1.1k starsChanged 5 months agoUnlicenseView on GitHub
Write and run jest tests for a hook in @reactuses/core, following the repo's conventions (co-located index.spec.ts, renderHook/act, fake timers, the .test/ helpers, and the SSR jest-environment pragma). Triggers on "write a test", "add test coverage", "fix the failing test", or "test this hook".
Adopted by
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Who's talking about childrentime/reactuse
- belentani7/ManosAbiertas“build(deps): bump the dev-dependencies group across 1 directory with 7 updates”GitHub · Nov 5, 2026
- belentani7/Belentani.cv-ai“fix(deps): bump the dev-dependencies group across 1 directory with 40 updates”GitHub · Nov 5, 2026
- younestsouli2019-bot/swarm-ops-project“build(deps): bump the minor-and-patch group with 45 updates”GitHub · Nov 5, 2026
- eemtijca/ludus“deps: bump the npm group with 2 updates”GitHub · Nov 2, 2026
- allocsys/news-market-ai“build(deps): bump the dashboard-minor-patch group across 1 directory with 8 updates”GitHub · Nov 2, 2026
The biggest 5 of 50 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 50
Talked about on GitHub (50 times).
On GitHub · 50
- Nov 5, 2026build(deps): bump the dev-dependencies group across 1 directory with 7 updates — belentani7/ManosAbiertas0 reactions
- Nov 5, 2026fix(deps): bump the dev-dependencies group across 1 directory with 40 updates — belentani7/Belentani.cv-ai0 reactions · 1 comment
- Nov 5, 2026build(deps): bump the minor-and-patch group with 45 updates — younestsouli2019-bot/swarm-ops-project0 reactions
- Nov 2, 2026deps: bump the npm group with 2 updates — eemtijca/ludus0 reactions · 1 comment
- Nov 2, 2026build(deps): bump the dashboard-minor-patch group across 1 directory with 8 updates — allocsys/news-market-ai0 reactions
45 more on GitHub
- Nov 2, 2026chore(deps): bump @reactuses/core from 6.3.1 to 6.6.1 — Ggboykxz/APEX0 reactions · 6 comments
- Nov 2, 2026build(deps): bump the dev-dependencies group across 1 directory with 6 updates — belentani7/ManosAbiertas0 reactions · 1 comment
- Nov 1, 2026Bump the web-demo-non-breaking group across 1 directory with 13 updates — akshay-mp/agent-timetravel0 reactions
- Nov 1, 2026deps: bump the npm group with 12 updates — eemtijca/caderno-aberto0 reactions
- Nov 1, 2026Bump the web-demo-non-breaking group across 1 directory with 13 updates — Raswanth01/agent-timetravel0 reactions
- Oct 27, 2026Bump @reactuses/core from 6.1.9 to 6.6.0 — 01BilalAhmad/distriflow0 reactions · 2 comments
- Oct 26, 2026build(deps): bump the dev-dependencies group across 1 directory with 43 updates — belentani7/ManosAbiertas0 reactions · 1 comment
- Oct 26, 2026deps: bump the npm group across 1 directory with 41 updates — eemtijca/ludus0 reactions · 3 comments
- Oct 26, 2026fix(deps): bump the dev-dependencies group across 1 directory with 39 updates — belentani7/Belentani.cv-ai0 reactions · 2 comments
- Oct 26, 2026build(deps): bump the dev-dependencies group across 1 directory with 37 updates — belentani7/ManosAbiertas0 reactions · 1 comment
- Oct 25, 2026fix(deps): bump the dev-dependencies group across 1 directory with 40 updates — belentani7/Belentani.cv-ai0 reactions · 3 comments
- Oct 25, 2026fix(deps): bump the dev-dependencies group across 1 directory with 39 updates — belentani7/Belentani.cv-ai0 reactions · 2 comments
- Oct 25, 2026deps: bump the npm group with 17 updates — eemtijca/caderno-aberto0 reactions
- Oct 24, 2026deps: bump @reactuses/core from 6.5.9 to 6.6.0 — simondalmasso/stracker0 reactions · 1 comment
- Oct 19, 2026deps: bump the npm group across 1 directory with 39 updates — eemtijca/ludus0 reactions · 2 comments
- Oct 19, 2026chore(deps): bump @reactuses/core from 6.5.9 to 6.6.0 — kanishka-namdeo/Unown0 reactions · 3 comments
- Oct 7, 2026build(deps): bump the npm-dependencies group across 1 directory with 37 updates — lagtastic-legends/zenodeck0 reactions · 4 comments
- Oct 1, 2026chore(deps): bump the npm group across 1 directory with 10 updates — eemtijca/ludus0 reactions · 2 comments
- Sep 30, 2026build(deps): bump the npm-dependencies group across 1 directory with 35 updates — lagtastic-legends/zenodeck0 reactions · 4 comments
- Sep 28, 2026chore(deps): bump the npm group with 9 updates — eemtijca/ludus0 reactions · 3 comments
- Sep 26, 2026build(deps): bump the production-dependencies group across 1 directory with 18 updates — prashantchataut/Nagarik-Watch0 reactions · 5 comments
- Sep 26, 2026build(deps): bump the production-dependencies group with 15 updates — prashantchataut/Nagarik-Watch0 reactions · 6 comments
- Sep 21, 2026deps(npm)(deps): bump the npm-production group across 1 directory with 45 updates — MANOFHATERS/autonomous-drug-repurposing0 reactions · 1 comment
- Sep 20, 2026chore(deps): bump the npm group with 10 updates — eemtijca/caderno-aberto0 reactions · 1 comment
- Sep 12, 2026build(deps): bump @reactuses/core from 6.5.5 to 6.5.6 — eemtijca/caderno-aberto0 reactions
- Sep 1, 2026chore(deps)(deps): bump @reactuses/core from 6.3.3 to 6.5.5 — Shri2242/Myntra-Ai-Review-discovery-Engine0 reactions · 2 comments
- Aug 24, 2026build(deps): bump @reactuses/core from 6.4.2 to 6.5.5 — qayyums3116/riphah_international_college0 reactions
- Aug 10, 2026Bump @reactuses/core from 6.4.0 to 6.5.0 — Mr-Python-in-China/cnoi-statement-generator0 reactions · 1 comment
- Aug 10, 2026deps(npm)(deps): bump the npm-production group across 1 directory with 34 updates — MANOFHATERS/autonomous-drug-repurposing0 reactions · 2 comments
- Jul 31, 2026chore(deps): bump @reactuses/core from 6.3.1 to 6.4.0 — LorenzaVolponi/giria-ai0 reactions · 1 comment
- Jul 11, 2026chore(deps): bump the frontend-group group across 1 directory with 32 updates — joneid-org/kalneslopene0 reactions · 1 comment
- Jul 5, 2026chore(deps): bump the frontend-group group across 1 directory with 31 updates — joneid-org/kalneslopene0 reactions · 1 comment
- Jul 4, 2026chore(deps): bump the frontend-group group across 1 directory with 32 updates — joneid-org/kalneslopene0 reactions · 1 comment
- Jul 1, 2026build(deps): bump @reactuses/core from 6.1.9 to 6.4.0 — kalelooz/planglade0 reactions · 4 comments
- Jun 29, 2026Bump @reactuses/core from 6.3.2 to 6.4.0 — Mr-Python-in-China/cnoi-statement-generator0 reactions · 1 comment
- Jun 29, 2026chore(deps)(deps): bump @reactuses/core from 6.3.3 to 6.4.0 — Shri2242/Ai-Review-Discovery-Engine0 reactions · 3 comments
- Jun 15, 2026deps(deps): bump the production-dependencies group across 1 directory with 59 updates — mohamedblueprintrak-design/BluePrint0 reactions · 4 comments
- Jun 1, 2026npm: bump the minor-updates group across 1 directory with 26 updates — nkpendyam/Kyro_IDE0 reactions · 1 comment
- May 26, 2026Bump the production-dependencies group across 1 directory with 44 updates — abduvali-web/ok0 reactions · 1 comment
- May 25, 2026chore(deps): bump @reactuses/core from 6.3.1 to 6.3.2 — Ggboykxz/APEX0 reactions · 4 comments
- May 22, 2026Bump @reactuses/core from 6.3.1 to 6.3.2 in /frontend — rawatharish27-commits/bookmyservice0 reactions · 2 comments
- May 18, 2026Bump @reactuses/core from 6.1.11 to 6.3.1 — Mr-Python-in-China/cnoi-statement-generator0 reactions · 1 comment
- May 8, 2026[Server Submission]: ReactUse MCP — 110+ React Hooks Discovery — cline/mcp-marketplace0 reactions
- May 8, 2026Add childrentime/reactuse MCP server 🤖🤖🤖 — punkpeye/awesome-mcp-servers0 reactions · 4 comments
- May 8, 2026Add ReactUse — 110+ React Hooks library — lukasmasuch/best-of-react0 reactions
In this repository8 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- hook-docsSkill
- new-hookSkill
- ping-indexnowSkill
- pr-descriptionSkill
- publish-hashnodeSkill
- publish-juejinSkill
- publish-mediumSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 46
Read current values via result.current.
- Distinctive: line 121
When fixing a *failing* test: run it first to see the real error, read the hook source and at least one call site, make the minimal fix, …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
hook-test — test a hook the ReactUse way
The core package uses jest (not vitest), testEnvironment: 'jsdom'. Tests run via
babel-jest against src/ directly — no build step needed.
Where tests live
Co-located with the hook: packages/core/src/useX/index.spec.ts (a couple use .test.ts,
but prefer index.spec.ts). There is no central __tests__ directory.
Basic pattern
import { act, renderHook } from '@testing-library/react'
import { useX } from '.'
describe('useX', () => {
function setUp(initial?: number) {
return renderHook(() => useX(initial))
}
it('inits with the given value', () => {
const { result } = setUp(5)
expect(result.current[0]).toBe(5)
})
it('updates on set', () => {
const { result } = setUp(0)
act(() => {
result.current[1](10) // wrap every state mutation in act()
})
expect(result.current[0]).toBe(10)
})
})Key rules:
- Wrap a
renderHookcall in a smallsetUp()helper. - Every state mutation goes inside
act(() => { … }). - Read current values via
result.current; usererender()/unmount()from therenderHookreturn for prop changes and cleanup assertions.
Timer hooks
describe('useInterval', () => {
jest.useFakeTimers()
jest.spyOn(global, 'clearInterval')
it('fires on the interval', () => {
const cb = jest.fn()
renderHook(() => useInterval(cb, 20))
expect(cb).not.toBeCalled()
jest.advanceTimersByTime(70)
expect(cb).toHaveBeenCalledTimes(3)
})
it('clears on unmount', () => {
const { unmount } = renderHook(() => useInterval(jest.fn(), 200))
unmount()
expect(clearInterval).toHaveBeenCalledTimes(1)
})
})SSR / hydration tests
For hooks that must not break SSR or cause hydration mismatch, use the custom environment and render on the server, then hydrate:
/**
* @jest-environment ./.test/ssr-environment
*/
import { act } from '@testing-library/react'
import ReactDOMServer from 'react-dom/server'
import ReactDOMClient from 'react-dom/client'
import { createMockMediaMatcher } from '../../.test'
import { createTestComponent } from '../../.test/testingHelpers'
describe('useX SSR', () => {
beforeEach(() => {
jest.resetModules()
window.matchMedia = createMockMediaMatcher({ '(prefers-color-scheme: dark)': true }) as any
})
it('does not mismatch during hydration', async () => {
const TestComponent = createTestComponent(() => useX())
const el = document.createElement('div')
const markup = ReactDOMServer.renderToString(<TestComponent />)
el.innerHTML = markup
const root = await act(() => ReactDOMClient.hydrateRoot(el, <TestComponent />))
expect(el.innerHTML).toBe(markup)
await act(() => root.unmount())
})
})Reference: packages/core/src/usePreferredDark/index.ssr.spec.tsx.
Helpers (packages/core/.test/)
createMockMediaMatcher(matches)andcreateMockRaf()—../../.testcreateTestComponent(hook),sleep(ms),request(req)—../../.test/testingHelpersjest-setup.tsadds atoHaveErrorMatchingmatcher and awindow.testErrorsarray.
Running
pnpm --filter @reactuses/core test useX # single hook (jest name pattern)
pnpm --filter @reactuses/core test # whole package
pnpm --filter @reactuses/core test:coverage # with coverageWhen fixing a failing test: run it first to see the real error, read the hook source and at least one call site, make the minimal fix, then re-run green. No speculative edits.
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.

