testing

GitHub

定义测试规范,涵盖单元测试、集成测试及E2E测试。指导Postgres/ClickHouse内存数据库测试配置,以及测试辅助工具包的隔离导出方法,确保测试代码不污染生产包。

.agents/skills/testing/SKILL.md latitude-dev/latitude-llm

Trigger Scenarios

编写或调试测试用例 选择单元测试与集成测试策略 配置Postgres或ClickHouse内存数据库测试环境 导出测试辅助工具而不包含测试代码

Install

npx skills add latitude-dev/latitude-llm --skill testing -g -y
More Options

Non-standard path

npx skills add https://github.com/latitude-dev/latitude-llm/tree/development/.agents/skills/testing -g -y

Use without installing

npx skills use latitude-dev/latitude-llm@testing

指定 Agent (Claude Code)

npx skills add latitude-dev/latitude-llm --skill testing -a claude-code -g -y

安装 repo 全部 skill

npx skills add latitude-dev/latitude-llm --all -g -y

预览 repo 内 skill

npx skills add latitude-dev/latitude-llm --list

SKILL.md

Frontmatter
{
    "name": "testing",
    "description": "Writing or debugging tests, choosing unit vs integration style, Postgres\/ClickHouse tests, regenerating ClickHouse test schema, or exporting test helpers from packages without pulling test code into production bundles."
}

Testing conventions and in-memory databases

When to use: Writing or debugging tests, choosing unit vs integration style, Postgres/ClickHouse tests, regenerating ClickHouse test schema, or exporting test helpers from packages without pulling test code into production bundles.

Package exports (test code isolation)

Test utilities (fakes, in-memory DB helpers, fixtures) must not be exported from a package’s main entry (src/index.ts).

  • Never re-export from ./test/ or ./testing/ in the main src/index.ts
  • To expose test helpers, add a /testing subpath in package.json exports:
{
  "exports": {
    ".": "./src/index.ts",
    "./testing": "./src/testing/my-test-helpers.ts"
  }
}
  • Consumers: import { Fake } from "@platform/my-package/testing"
  • Biome noRestrictedImports blocks test paths in production source; tsdown fails the build if test code is resolved from prod entry points

Conventions

  • Shared default environment: Node with globals enabled (packages/vitest-config/index.ts)
  • Write tests, mostly e2e, some unit tests when logic is complex
  • Unit tests: domain entities/use-cases/policies with fakes
  • Contract tests: adapter compliance against domain ports
  • Integration tests: infra-backed tests for Postgres/ClickHouse/Redis/BullMQ/object storage
  • End-to-end tests: ingest boundary to query boundary across organization scoping
  • Keep tests deterministic and isolated
  • Prefer package-local runs during iteration; run full monorepo tests before PR

Database testing (in-memory)

Always use in-memory databases for tests. Do not use vi.mock/vi.fn to mock repository methods and do not require running database servers. The project provides embedded, in-process database engines that run the real SQL against the real schema:

  • ClickHouse → chdb (chdb package): An in-process ClickHouse engine via @platform/testkit.
  • Postgres → PGlite (@electric-sql/pglite): An in-process Postgres via WASM via @platform/testkit.

Postgres test setup (@platform/testkit)

import { setupTestPostgres } from "@platform/testkit"
import { beforeAll, describe, it } from "vitest"

const pg = setupTestPostgres()

describe("MyRepository", () => {
  it("does something", async () => {
    // pg.postgresDb is a real Drizzle instance backed by PGlite in-memory
    // pg.db is the lower-level Drizzle/PGlite instance for direct queries
  })
})

setupTestPostgres() registers vitest hooks automatically:

  • beforeAll: creates a PGlite instance, creates the latitude_app role, and runs all Drizzle migrations
  • afterAll: closes the PGlite connection

ClickHouse test setup (@platform/testkit)

Local developers must build the chdb native binding once before running ClickHouse-backed tests:

pnpm --filter @platform/testkit chdb:build

Package-level test scripts intentionally do not run that build step; CI builds chdb once in the ClickHouse integration job before running the packages that need it.

import { setupTestClickHouse } from "@platform/testkit"
import { beforeAll, describe, it } from "vitest"

const ch = setupTestClickHouse()

describe("MyRepository", () => {
  let repo: ReturnType<typeof createMyRepository>

  beforeAll(() => {
    repo = createMyRepository(ch.client)
  })

  it("does something", async () => {
    // ch.client is a real ClickHouseClient backed by chdb in-memory
  })
})

setupTestClickHouse() registers vitest hooks automatically:

  • beforeAll: creates a chdb session and loads the schema from schema.sql
  • beforeEach: truncates all tables for test isolation
  • afterAll: destroys the session and cleans up temp files

After new ClickHouse migrations, regenerate the in-memory test schema (only if the user asked you to run migration-related commands — see database-clickhouse-weaviate):

pnpm --filter @platform/db-clickhouse ch:schema:dump

Why not vi.mock?

Mocking repositories with vi.fn() tests the wiring, not the queries. In-memory databases catch real bugs: wrong column names, broken argMax aggregations, incorrect GROUP BY clauses, and schema mismatches. They run quickly with zero external dependencies.

Version History

  • 2479822 Current 2026-08-20 10:36

Same Skill Collection

.agents/skills/agentation-watch-mode/SKILL.md
.agents/skills/analyze-problem/SKILL.md
.agents/skills/api-endpoints/SKILL.md
.agents/skills/architecture-boundaries/SKILL.md
.agents/skills/artifact-designer/SKILL.md
.agents/skills/async-jobs-and-events/SKILL.md
.agents/skills/authentication/SKILL.md
.agents/skills/backoffice/SKILL.md
.agents/skills/better-auth-best-practices/SKILL.md
.agents/skills/code-style/SKILL.md
.agents/skills/database-clickhouse/SKILL.md
.agents/skills/database-postgres/SKILL.md
.agents/skills/docs/SKILL.md
.agents/skills/effect-and-errors/SKILL.md
.agents/skills/env-configuration/SKILL.md
.agents/skills/explain-diff-html/SKILL.md
.agents/skills/fix-datadog-issues/SKILL.md
.agents/skills/gh-issue/SKILL.md
.agents/skills/humanizer/SKILL.md
.agents/skills/managing-maintenance-windows/SKILL.md
.agents/skills/mintlify-preview/SKILL.md
.agents/skills/notifications/SKILL.md
.agents/skills/production-release/SKILL.md
.agents/skills/review-pr-comments/SKILL.md
.agents/skills/toolchain-commands/SKILL.md
.agents/skills/web-frontend/SKILL.md
.agents/skills/ci-watchdog/SKILL.md
.agents/skills/create-pr/SKILL.md
.agents/skills/temporal-developer/SKILL.md

Metadata

Files
0
Version
2479822
Hash
d10cfba1
Indexed
2026-08-20 10:36

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-25 12:02
浙ICP备14020137号-1 $방문자$