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 agentmods add rules/rizkyhaksono/portfolio-v3/unit-testinggit clone --depth 1 https://github.com/rizkyhaksono/portfolio-v3What 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 | $0.00000 | $0.00929 |
| Opus 5 | $0.00000 | $0.00464 |
| Sonnet 5 | $0.00000 | $0.00186 |
| Haiku 4.5 | $0.00000 | $0.00093 |
Grade A, and why
unit-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 2d 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.
This is a copy
100% identical to unit-testing — 1 line differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 116 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Unit Testing Rules
Core Principles
- Scope: Test one unit in isolation (pure functions, small utilities, or a single module's public API). Avoid integration concerns.
- Location & naming: Place files under
/tests/unitmirroring thesrcpath; name them*.test.tsor*.test.tsx. - Dependencies: Never mock internal code; only mock external dependencies (APIs, DB, file system). Use MSW for HTTP.
- Determinism: Eliminate flakiness. Control time, randomness, and async with fake timers (
vi.useFakeTimers,vi.setSystemTime) and stubs forMath.random. - Structure: Use Arrange–Act–Assert; name tests by behavior ("should … when …").
- Assertions: Prefer explicit assertions over snapshots; only use small, stable snapshots when necessary.
- Coverage: Cover happy path, key error states, and edge cases; don't chase line coverage for its own sake.
- Isolation: Reset state and mocks between tests (
vi.restoreAllMocks,vi.resetModules). No cross-test data coupling. - Quality gates: Tests must pass TypeScript strict checks and ESLint; no
anyor untyped helpers.
Test Structure
describe("Feature", () => {
describe("when condition", () => {
it("should expected behavior", async () => {
// Arrange
const input = { /* test data */ };
// Act
const result = await functionUnderTest(input);
// Assert
expect(result).toEqual(expectedOutput);
});
});
});
Mocking Guidelines
- External APIs: Mock with MSW or
vi.mock()for HTTP clients - Database: Mock repository functions, not the ORM itself
- Time: Use
vi.useFakeTimers()andvi.setSystemTime() - Randomness: Stub
Math.random()withvi.spyOn(Math, 'random').mockReturnValue(0.5) - Environment: Mock
process.envvalues as needed
Common Patterns
Testing Pure Functions
describe("formatUserData", () => {
it("should format user name correctly", () => {
const user = { firstName: "John", lastName: "Doe" };
const result = formatUserData(user);
expect(result.name).toBe("John Doe");
});
});
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.
- 2d ago First seen · 116 lines · 929 tokens per session scan A 30d5ad2929fd
unit-testing is a cursor rule published in the GitHub repository rizkyhaksono/portfolio-v3 (6 stars, last pushed 4d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 929 tokens. A static security scan graded it A with 0 findings. It is 100% identical to unit-testing, differing in 1 line, and is treated as a copy.
Other cursor rules, from other repositories
python_tests
We use the unit tests to cover internal behavior that can work without the web / backend counterpart. We aim for 95%+ unit test coverage of our Python code in lib/streamlit.
unit-tests-tdd
TDD required for behavior changes; ≥80% package coverage on touched packages; unit-test conventions.
commit-checks
Run gofmt, go vet, and unit tests before committing Go files.
unit-testing
Python integration and unit testing — pytest patterns, test classes, workflow test tips.
testing
Testing conventions and Playwright patterns.
unit-testing-standards
Cursor rule "unit-testing-standards" from adobecom/da-express-milo, covering unit testing standards, testing philosophy, testing framework stack, test structure patterns and 1. standard test file organization.