用途:为 Latitude LLM 项目提供测试约定,适用于编写或调试测试、选择单元测试与集成测试风格、处理 Postgres 与 ClickHouse 测试、重新生成 ClickHouse 测试 schema,以及在不把测试代码打入生产包的前提下从包中导出测试辅助代码。
包导出(测试代码隔离):测试工具(fake、内存数据库辅助、fixture)不得从包主入口 src/index.ts 导出,禁止在主入口里从 ./test/ 或 ./testing/ 再导出。要暴露测试辅助代码,需在 package.json 的 exports 中新增 /testing 子路径: { "exports": { ".": "./src/index.ts", "./testing": "./src/testing/my-test-helpers.ts" } } 使用方通过 import { Fake } from "@platform/my-package/testing" 引入。Biome 的 noRestrictedImports 会在生产源码中拦截测试路径;若生产入口解析到测试代码,tsdown 会令构建失败。
约定:共享默认环境为 Node 并启用 globals(packages/vitest-config/index.ts)。测试以 e2e 为主,逻辑复杂时写部分单元测试。单元测试针对领域实体、用例、策略并使用 fake;契约测试验证适配器是否符合领域端口;集成测试覆盖 Postgres、ClickHouse、Redis、BullMQ、对象存储等基础设施;端到端测试覆盖从 ingest 边界到 query 边界并跨组织作用域。测试应保持确定性和隔离;迭代时优先在包内运行,提交 PR 前运行整个 monorepo 测试。
数据库测试(内存):始终使用内存数据库,不要用 vi.mock/vi.fn mock 仓库方法,也不要依赖运行中的数据库服务。项目提供嵌入式、进程内数据库引擎,对真实 schema 执行真实 SQL:ClickHouse 用 chdb(chdb 包,经 @platform/testkit 提供进程内引擎);Postgres 用 PGlite(@electric-sql/pglite,经 @platform/testkit 提供 WASM 进程内实例)。
Postgres 测试通过 setupTestPostgres() 自动注册 vitest 钩子:beforeAll 创建 PGlite 实例、创建 latitude_app 角色并运行全部 Drizzle 迁移;afterAll 关闭连接。ClickHouse 测试通过 setupTestClickHouse():beforeAll 创建 chdb 会话并从 schema.sql 加载 schema;beforeEach 截断所有表以保证隔离;afterAll 销毁会话并清理临时文件。新增 ClickHouse 迁移后,需重新生成内存测试 schema(仅在用户要求运行迁移相关命令时执行): pnpm --filter @platform/db-clickhouse ch:schema:dump
不使用 vi.mock 的原因:用 vi.fn() mock 仓库只测了接线而非查询;内存数据库能发现真实缺陷,如列名错误、argMax 聚合错误、GROUP BY 错误和 schema 不匹配,且运行快、无外部依赖。