testing

testing is a cursor rule for Cursor from bestcarly/opc-coding-guide. It costs 1,890 tokens per session, scanned A, original, MIT.

A set of project rules for writing unit and integration tests. Unit tests check one function or module, while integration tests check several parts working together, often with a test database.

In plain words
What is it for?
Use it to guide Jest tests for functions and modules, important business workflows, Arrange-Act-Assert test structure, test names, database setup, and coverage expectations.
Why use it?
It gives tests a consistent structure, naming style, data cleanup process, and coverage target, making failures easier to understand and reducing tests that depend on one another.

Cursor rule for Cursor

Written for Cursor: a Cursor rule (.mdc).

Good fit Use it to guide Jest tests for functions and modules, important business workflows, Arrange-Act-Assert test structure, test names, database setup, and coverage expectations.

Compare 6 cursor rules from other repositories ↓
Install with agentmods
npx agentmods add rules/bestcarly/opc-coding-guide/testing
Install

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.

Clone the repo
git clone --depth 1 https://github.com/bestcarly/opc-coding-guide

Made for: Cursor.

Wrote 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.

agentmods badge for testing

README.md
[![agentmods](https://agentmods.dev/badge/rules/bestcarly/opc-coding-guide/testing/github.svg)](https://agentmods.dev/rules/bestcarly/opc-coding-guide/testing)
Your own site
<a href="https://agentmods.dev/rules/bestcarly/opc-coding-guide/testing"><img src="https://agentmods.dev/badge/rules/bestcarly/opc-coding-guide/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.

agentmods 80×15 button for testing

Your own site · 80×15
<a href="https://agentmods.dev/rules/bestcarly/opc-coding-guide/testing"><img src="https://agentmods.dev/badge/rules/bestcarly/opc-coding-guide/testing.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 1,890 This file is loaded in full into every session.
When invoked 1,890 The same file — it is already loaded in full.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5.1 $0.01890 $0.01890
Opus 5.5 $0.00756 $0.00756
Sonnet 5.5 $0.00378 $0.00378
Haiku 4.5 $0.00189 $0.00189

Measured 2mo ago against content hash 166b35b0cbe4, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

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 2mo 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.

skills/cursor-rules/testing.mdc · 285 lines

How it starts

The opening of the file, as written. The whole thing — 285 lines — stays where its author put it; the contents beside it link to each section on GitHub.

测试规则(2026 年版)

补充人:墨铃 (Mori)
补充日期:2026-02-28
参考章节:第八章


单元测试

  • 每个函数/模块必须有单元测试
  • 覆盖率目标:≥ 80%(核心模块 ≥ 90%)
  • 测试命名:should [预期行为] when [条件]
  • 使用 Arrange-Act-Assert (AAA) 模式
// ✅ 正确:AAA 模式
describe("UserService", () => {
  describe("createUser", () => {
    it("should throw ValidationError when email is invalid", async () => {
      // Arrange
      const invalidInput = { email: "not-an-email", password: "validPassword123!" };
      
      // Act & Assert
      await expect(UserService.createUser(invalidInput))
        .rejects.toThrow(ValidationError);
    });
    
    it("should return user with hashed password when input is valid", async () => {
      // Arrange
      const validInput = { email: "[email protected]", password: "validPassword123!" };
      
      // Act
      const user = await UserService.createUser(validInput);
      
      // Assert
      expect(user.email).toBe(validInput.email);
      expect(user.passwordHash).not.toBe(validInput.password);
      expect(bcrypt.compareSync(validInput.password, user.passwordHash)).toBe(true);
    });
  });
});

集成测试

  • 关键业务流程必须有集成测试
  • 使用真实数据库(测试环境)
  • 测试数据独立,不互相依赖
  • 每个测试前后清理数据
// ✅ 正确:集成测试示例
describe("POST /api/orders", () => {
  let db: Database;
  let auth: AuthHelper;
  
  beforeAll(async () => {
    db = await createTestDatabase();
    auth = new AuthHelper(db);
  });
  
  afterAll(async () => {
    await db.close();
  });
  
  beforeEach(async () => {
    await db.truncate(["users", "orders", "products"]);
  });
  
  it("should create order and reduce inventory", async () => {
    // 准备测试数据
    const user = await auth.createUser({ email: "[email protected]" });
    const product = await db.insert("products", { name: "Widget", stock: 100, price: 9.99 });
    
    // 执行请求
    const response = await request(app)
      .post("/api/orders")
      .set("Authorization", `Bearer ${user.token}`)
      .send({ productId: product.id, quantity: 5 });
    
    // 验证响应
    expect(response.status).toBe(201);
    expect(response.body.order.total).toBe(49.95);
    
    // 验证数据库状态
    const updatedProduct = await db.findById("products", product.id);
    expect(updatedProduct.stock).toBe(95);
  });
});

Read the full file on GitHub · 285 lines

Changes

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.

  1. 2mo ago First seen · 285 lines · 1,890 tokens per session scan A 166b35b0cbe4

Subscribe to this mod's changes

testing is a cursor rule published in the GitHub repository bestcarly/opc-coding-guide (7 stars, last pushed 7mo ago), licensed MIT. It adds 1,890 tokens to every session, about $0.0076 per session on Opus 5.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-31.