Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add gohypergiant/agent-skills --skill accelint-ts-testinggit clone --depth 1 https://github.com/gohypergiant/agent-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/gohypergiant/agent-skills/accelint-ts-testing)<a href="https://agentmods.dev/skills/gohypergiant/agent-skills/accelint-ts-testing"><img src="https://agentmods.dev/badge/skills/gohypergiant/agent-skills/accelint-ts-testing/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/gohypergiant/agent-skills/accelint-ts-testing"><img src="https://agentmods.dev/badge/skills/gohypergiant/agent-skills/accelint-ts-testing.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- Socket pass
- Snyk pass
- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00169 | $0.03406 |
| Opus 5 | $0.00084 | $0.01703 |
| Sonnet 5 | $0.00034 | $0.00681 |
| Haiku 4.5 | $0.00017 | $0.00341 |
Grade A, and why
accelint-ts-testing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 148 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Vitest Best Practices
Comprehensive patterns for writing maintainable, effective vitest tests. Focused on expert-level guidance for test organization, clarity, and performance.
NEVER Do When Writing Vitest Tests
- NEVER write tests for files with no behavior - Constants files (just
export const X = value), type definition files, GLSL uniform declarations, and pure data files contain no logic to test. Testingexpect(MY_CONSTANT).toBe(42)verifies nothing: if the value changes, the test changes with it, providing zero protection. These "tests" waste CI time and create maintenance burden when values change. Test behavior (functions, logic, transformations), not data declarations. If a file exports only types, constants, or data structures with no functions or logic, skip testing it entirely. - NEVER skip global mock cleanup configuration - Manual cleanup appears safe but creates "action at a distance" failures: a mock in test file A leaks into test file B running 3 files later, causing non-deterministic failures that only appear when tests run in specific orders. These Heisenbugs waste hours in CI debugging. Configure
clearMocks: true,mockReset: true,restoreMocks: trueinvitest.config.tsonce to eliminate this entire class of order-dependent failure. - NEVER nest describe blocks more than 2 levels deep - Deep nesting creates cognitive overhead and excessive indentation. Put context in test names instead:
it('should add item to empty cart')vsdescribe('when cart is empty', () => describe('addItem', ...)). - NEVER write test descriptions that don't read as sentences - Test descriptions must complete the sentence "it ..." in lowercase. Write
it('should add item to cart')notit('Add item to cart')orit('It should add item to cart'). The description reads as a sentence when prefixed with "it": "it should add item to cart". Capitalized starts, non-sentence formats likeit('addToCart test'), or redundant "It should" break readability and test output consistency. Example-based tests useit('should...')while property-based tests useit('property: ...')format. - NEVER test library internals that the library already tests - Testing
expect(array.map(fn)).toEqual(expected)wastes time verifying that Array.prototype.map works correctly. The JavaScript/TypeScript standard library and established third-party libraries are already well-tested. Focus tests on your business logic, not on proving that lodash, React, or the language itself works. If you find yourself testing "does this library function do what it claims?", you're testing the wrong layer. Test how your code uses libraries, not whether libraries work. - NEVER export internal functions just to test them - Tests should verify behavior through the public API, not reach into implementation details. Exporting private helpers, internal utilities, or implementation functions solely to enable testing is a code smell that indicates either: (1) the public API is insufficient for testing the behavior, or (2) the tests are verifying implementation details instead of behavior. If internal logic is complex enough to warrant dedicated testing, extract it into a separate module with its own public API and test file. Private functions get tested indirectly through the public functions that call them.
- NEVER mock your own pure functions - Mocking internal code makes tests brittle and less valuable. Mock only external dependencies (APIs, databases, third-party libraries). Prefer fakes > stubs > spies > mocks.
- NEVER use loose assertions like
toBeTruthy()ortoBeDefined()- These assertions pass for multiple distinct values you never intended:toBeTruthy()passes for1,"false",[], and{}- all semantically different. When refactoring changesgetUser()from returning{id: 1}to returning1, your test still passes but your production code breaks. Loose assertions create false confidence that evaporates in production.toBeTypeOf()is NOT a loose assertion. - NEVER test implementation details instead of behavior - Tests that verify "function X was called 3 times" create false failures: you optimize code to call X once via memoization, all tests fail, yet the user experience is identical (and faster). These tests actively punish performance improvements and refactoring. Test what users observe (outputs given inputs), not how your code achieves it internally.
- NEVER share mutable state between tests - Tests that depend on execution order or previous test state create flaky, unreliable suites. Each test must be fully independent with fresh setup.
- NEVER use
anyor skip type checking in test files - When implementation signatures change, tests withas anysilently pass while calling functions with wrong arguments. You ship broken code that TypeScript could have caught. Tests are executable documentation:user as anycommunicates nothing, butcreateTestUser(Partial<User>)shows exactly what properties matter for this test case. - NEVER mark test files as complete without running TypeScript type checking - Test files are typically excluded from
tsconfig.jsoncompilation paths, so runningtscat the project root won't catch type errors in tests. Type errors in tests cause runtime failures, incorrect test behavior, and false confidence from tests that don't test what they claim. Before marking any test file as "done", you MUST runtsc --noEmitdirectly against the test file using the project's package manager (npm/pnpm/bun/yarn). For monorepos,cdinto the specific package directory first, then run type checking. Fix all type errors before proceeding - never useas anyor@ts-ignoreto bypass errors. - NEVER assume TypeScript types prevent runtime errors - TS types are compile-time only and vanish at runtime. Testing only "type-valid" inputs creates a false sense of security. In production, functions receive invalid data from JSON APIs without validation,
JSON.parse()results, external libraries, user input, and database records. A function typed asprocess(data: ValidData)can still receivenull,undefined, or malformed objects at runtime. Test defensive programming scenarios: passnullto non-nullable parameters,undefinedto required fields, malformed objects to typed parameters. These "type-invalid" tests catch real bugs that TypeScript cannot prevent. - NEVER write weak properties when stronger ones exist - Property-based tests that only verify "no exception thrown" or "returns a value" provide minimal coverage. When testing encode/decode pairs, verify roundtrip equality (
decode(encode(x)) === x), not just that decode succeeds. When testing normalization, verify idempotence (normalize(normalize(x)) === normalize(x)), not just that it returns a string. Weak properties give false confidence: they pass but don't actually validate correctness.
What ships with it
15 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- AGENTS.md 11 KB
- assets/output-report-template.md 11 KB
- README.md 2.1 KB
- references/aaa-pattern.md 11 KB
- references/assertions.md 10.0 KB
- references/async-testing.md 10 KB
- references/error-handling.md 18 KB
- references/organization.md 20 KB
- references/parameterized-tests.md 8.8 KB
- references/performance.md 14 KB
- references/property-based-testing.md 18 KB
- references/quick-start.md 1.9 KB
- references/snapshot-testing.md 10 KB
- references/test-doubles.md 12 KB
- references/vitest-features.md 14 KB
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 148 lines · 169 tokens per session scan A d46441ec9746
accelint-ts-testing is a skill published in the GitHub repository gohypergiant/agent-skills (23 stars, last pushed yesterday), licensed Apache-2.0. It adds 169 tokens to every session and 3,406 once invoked, about $0.0008 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
migrate-to-shoehorn
Migrate test files from as type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace as in tests, or needs partial test data.
typescript-test-writing
Use this skill when writing or modifying tests in the llxprt-code repository. Covers mandatory TDD, behavioral testing, bun:test conventions and file naming, mock hygiene (no mock theater), and what never to test. Distilled from dev-docs/RULES.md, which remains the source of truth.
typescript
TypeScript strict mode with eslint and jest.
agent-inspect
Local evidence debugger and trajectory-test toolkit for TypeScript AI agents. Use when capturing framework-faithful traces, asserting TraceContract/TraceFacts, packaging Evidence v2, or inspecting local runs over read-only MCP (gettracefacts).
jest
Jest testing best practices for JavaScript and TypeScript applications, covering test structure, mocking, and assertion patterns.
jest-unit
Unit testing skill using Jest for TypeScript and JavaScript, covering mocking, spies, snapshots, coverage, async testing, and custom matchers.