测试指南
本文档提供 Rin 项目中测试的全面指南。
概述
Rin 为客户端和服务端使用不同的测试框架:
- 客户端: Vitest 配合 jsdom 环境进行 React 组件测试
- 服务端: Bun 原生测试运行器 配合内存 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 客户端
覆盖率
客户端和服务端都支持代码覆盖率报告:
覆盖率报告生成在:
- 客户端:
client/coverage/ - 服务端:
server/coverage/
CI/CD 集成
测试在以下情况自动运行:
- 每次推送到
main或develop分支 - 每个 Pull Request
- 部署前(阻塞性)
详细信息请参阅 GitHub Actions 工作流。
最佳实践
- 为新功能编写测试:每个新功能都应该包含测试
- 测试边界情况:包括错误条件和边界情况的测试
- 使用描述性名称:测试描述应该清楚说明正在测试什么
- 保持测试独立:每个测试都应该能够独立运行
- 模拟外部依赖:为外部 API 和服务使用模拟
故障排除
客户端测试失败
服务端测试失败
覆盖率未生成
确保你在测试配置中配置了覆盖率报告器。