测试指南
本文档提供 Rin 项目中测试的全面指南。
概述
Rin 在整个仓库统一使用一套测试运行器:
- 运行器:Bun 原生测试运行器 与
bun:testAPI - 客户端环境:React 组件测试导入统一的 jsdom 初始化文件
- 服务端环境:Worker 兼容全局对象与内存 SQLite 数据库
运行测试
所有测试
客户端测试
服务端测试
测试结构
客户端测试
位置:client/src/**/__tests__/*.test.ts
服务端测试
位置:
- 单元测试:
server/src/**/__tests__/*.test.ts - 集成测试:
server/tests/integration/*.test.ts - 安全测试:
server/tests/security/*.test.ts
编写测试
客户端测试
- 组件测试:单独测试 React 组件
- API 客户端测试:测试 HTTP 客户端和 API 调用
- 工具函数测试:测试辅助函数
示例:
服务端测试
- 服务测试:测试服务中的业务逻辑
- 路由测试:测试 API 端点
- 工具函数测试:测试辅助函数
使用数据库的示例:
测试夹具
服务端测试使用夹具来设置模拟数据:
server/tests/fixtures/index.ts- 模拟数据库和环境设置server/tests/test-api-client.ts- 用于测试的类型安全 API 客户端
覆盖率
根目录命令会生成一份合并覆盖率报告:
合并报告生成在 coverage/。若从客户端或服务端目录单独运行覆盖率命令,报告仍分别写入 client/coverage/ 或 server/coverage/。
CI/CD 集成
测试在以下情况自动运行:
- 每次推送到
main或trunk分支 - 每个 Pull Request
- 部署前(阻塞性)
详细信息请参阅 GitHub Actions 工作流。
最佳实践
- 为新功能编写测试:每个新功能都应该包含测试
- 测试边界情况:包括错误条件和边界情况的测试
- 使用描述性名称:测试描述应该清楚说明正在测试什么
- 保持测试独立:每个测试都应该能够独立运行
- 模拟外部依赖:为外部 API 和服务使用模拟
- 统一运行器:测试 API 只从
bun:test导入,不要再添加 Vitest 或其他运行器
故障排除
客户端测试失败
服务端测试失败
覆盖率未生成
确保你在测试配置中配置了覆盖率报告器。