测试与排查
按改动选择检查
bun test --run
bun typecheck
bun web:check
bun lint
bun format:check
bun build
bun run docs:build根配置在 vitest.config.ts,测试靠近实际代码。接口和数据边界使用进程内数据库;React 行为测试使用浏览器模拟环境;Astro 模板另由 web:check 检查。
只改教程时检查格式、文档构建和浏览器内容即可,不必为可逆文案改动编写测试。修改认证、数据归属、积分或账单时,需要有意义的边界测试。
数据库测试
@repo/db/testing 的 createTestDatabase() 创建独立 PGlite,应用已提交迁移。每个测试文件建立自己的实例,测试间调用 reset(),结束时 close()。
import { createTestDatabase } from "@repo/db/testing";
const database = await createTestDatabase();
try {
// 使用 database.db 插入测试身份并执行实际查询
await database.reset();
} finally {
await database.close();
}不要向真实开发或生产库运行测试。测试应用迁移,能发现漏迁移、唯一约束和外键问题,不能改成结构推送来掩盖失败。
接口测试
使用路由调用器和明确上下文,覆盖成功、未登录、跨用户、跨组织、移除成员及重复事件。涉及事务、余额和唯一约束时使用真实数据库语义,避免只模拟“数据库返回成功”。
现有参考包括 apps/api/routers/workspace.test.ts、billing.test.ts、db/schema/index.test.ts 和账号配置测试。测试数量会随迭代变化,验收记录按当时日期保存。
界面测试
覆盖加载、空数据、提交失败、键盘和主题;认证成功后检查会话刷新,退出失败时保留真实登录状态。新增路由还要检查直接加载与边缘分流,不能只点击站内链接。
手工验收与限制
检查公开原始 HTML、工具真实输出、复制与下载、账号切换后的数据隔离。第三方登录、邮件投递、Stripe 测试支付及线上 Hyperdrive 必须分别实测;本地测试通过不自动证明这些服务完成。
失败时先定位配置、网络、路由、认证、数据库或界面状态,再运行对应的最小复现。保留必要错误和请求标识,不输出秘密或用户内容。