1
0
Files
nex/openspec/specs/test-coverage/spec.md
lanyuanxiaoyao 9359ca7f62 feat: 完成前端重构,采用 Ant Design 5 和完整测试体系
- 采用 Ant Design 5 作为 UI 组件库,替换自定义组件
- 集成 React Router v7 提供路由导航
- 使用 TanStack Query v5 管理数据获取和缓存
- 建立 Vitest + React Testing Library 测试体系
- 添加 Playwright E2E 测试覆盖
- 使用 MSW mock API 响应
- 配置 TypeScript strict 模式
- 采用 SCSS Modules 组织样式
- 更新 OpenSpec 规格以反映前端架构变更
- 归档 frontend-refactor 变更记录
2026-04-16 11:21:48 +08:00

169 lines
5.4 KiB
Markdown

# Test Coverage
## ADDED Requirements
### Requirement: 建立单元测试体系
系统 SHALL 建立完整的单元测试体系,覆盖核心业务逻辑。
#### Scenario: config 包测试覆盖
- **WHEN** 运行 config 包的单元测试
- **THEN** SHALL 覆盖 Provider、Model、Stats 的 CRUD 操作
- **THEN** SHALL 测试正常场景和错误场景
- **THEN** SHALL 验证数据库操作的准确性
#### Scenario: router 包测试覆盖
- **WHEN** 运行 router 包的单元测试
- **THEN** SHALL 覆盖模型路由逻辑
- **THEN** SHALL 测试模型不存在、模型禁用、供应商禁用等场景
- **THEN** SHALL 验证路由结果的正确性
#### Scenario: protocol 包测试覆盖
- **WHEN** 运行 protocol 包的单元测试
- **THEN** SHALL 覆盖 OpenAI 和 Anthropic 协议转换逻辑
- **THEN** SHALL 测试请求转换、响应转换、流式转换
- **THEN** SHALL 验证转换的准确性和完整性
### Requirement: 建立集成测试体系
系统 SHALL 建立集成测试体系,覆盖 API 端到端流程。
#### Scenario: OpenAI 协议集成测试
- **WHEN** 运行 OpenAI 协议的集成测试
- **THEN** SHALL 测试完整的请求-响应流程
- **THEN** SHALL 测试流式响应流程
- **THEN** SHALL 测试错误处理流程
#### Scenario: Anthropic 协议集成测试
- **WHEN** 运行 Anthropic 协议的集成测试
- **THEN** SHALL 测试完整的请求-响应流程
- **THEN** SHALL 测试流式响应流程
- **THEN** SHALL 测试协议转换的准确性
#### Scenario: 管理接口集成测试
- **WHEN** 运行管理接口的集成测试
- **THEN** SHALL 测试 Provider、Model、Stats 的 CRUD 操作
- **THEN** SHALL 验证 API 响应格式
- **THEN** SHALL 测试错误场景
### Requirement: 提供测试工具函数
系统 SHALL 提供测试工具函数,简化测试编写。
#### Scenario: 测试数据库初始化
- **WHEN** 编写需要数据库的测试
- **THEN** SHALL 提供测试数据库初始化函数
- **THEN** SHALL 使用临时数据库文件
- **THEN** SHALL 在测试结束后自动清理
#### Scenario: Mock 工具
- **WHEN** 编写需要 Mock 的测试
- **THEN** SHALL 提供 Mock 接口实现
- **THEN** SHALL 支持常见 Mock 场景
- **THEN** SHALL 易于使用和扩展
### Requirement: 达到测试覆盖率目标
系统 SHALL 达到 > 80% 的测试覆盖率。
#### Scenario: 总体覆盖率
- **WHEN** 运行所有测试并生成覆盖率报告
- **THEN** 总体覆盖率 SHALL 大于 80%
- **THEN** 核心包覆盖率 SHALL 大于 85%
#### Scenario: 覆盖率报告生成
- **WHEN** 运行测试覆盖率命令
- **THEN** SHALL 生成覆盖率报告文件
- **THEN** SHALL 支持生成 HTML 格式报告
- **THEN** SHALL 显示每个文件的覆盖率
### Requirement: 集成到构建流程
测试 SHALL 集成到构建流程中。
#### Scenario: 运行测试命令
- **WHEN** 执行 `make test` 命令
- **THEN** SHALL 运行所有单元测试和集成测试
- **THEN** SHALL 显示测试结果
- **THEN** SHALL 在测试失败时返回非零退出码
#### Scenario: 覆盖率检查命令
- **WHEN** 执行 `make test-coverage` 命令
- **THEN** SHALL 运行测试并生成覆盖率报告
- **THEN** SHALL 检查覆盖率是否达标
- **THEN** SHALL 在覆盖率不足时返回非零退出码
### Requirement: 建立前端单元测试覆盖
前端代码 SHALL 建立单元测试覆盖,纳入整体测试覆盖率统计。
#### Scenario: API 层测试覆盖
- **WHEN** 运行前端 API 层的单元测试
- **THEN** SHALL 覆盖 api/client.ts 的请求封装和字段转换逻辑
- **THEN** SHALL 覆盖 api/providers.ts、api/models.ts、api/stats.ts 的所有函数
- **THEN** SHALL 使用 MSW mock API 响应
#### Scenario: Hooks 测试覆盖
- **WHEN** 运行前端 Hooks 的单元测试
- **THEN** SHALL 覆盖 useProviders、useModels、useStats 的查询和变更逻辑
- **THEN** SHALL 验证缓存失效和自动刷新行为
### Requirement: 建立前端组件测试覆盖
前端 SHALL 使用 React Testing Library 建立组件测试覆盖。
#### Scenario: 页面组件测试覆盖
- **WHEN** 运行前端组件测试
- **THEN** SHALL 覆盖 ProviderTable 的列表渲染和交互操作
- **THEN** SHALL 覆盖 ProviderForm 的表单校验和提交
- **THEN** SHALL 覆盖 ModelForm 的表单校验和提交
- **THEN** SHALL 覆盖 StatsTable 的筛选和数据展示
### Requirement: 建立前端 E2E 测试覆盖
前端 SHALL 使用 Playwright 建立 E2E 测试覆盖。
#### Scenario: 供应商管理 E2E 覆盖
- **WHEN** 运行 E2E 测试
- **THEN** SHALL 覆盖供应商创建、编辑、删除的完整用户流程
- **THEN** SHALL 覆盖模型创建、编辑、删除的完整用户流程
#### Scenario: 统计查询 E2E 覆盖
- **WHEN** 运行 E2E 测试
- **THEN** SHALL 覆盖统计页面的加载和筛选查询流程
- **THEN** SHALL 覆盖页面间的导航切换
### Requirement: 前端测试集成到构建流程
前端测试 SHALL 集成到项目的构建和验证流程中。
#### Scenario: 运行前端测试命令
- **WHEN** 在 frontend/ 目录执行测试命令
- **THEN** SHALL 运行所有 Vitest 单元测试和组件测试
- **THEN** SHALL 显示测试结果
- **THEN** SHALL 在测试失败时返回非零退出码
#### Scenario: 运行前端 E2E 测试命令
- **WHEN** 在 frontend/ 目录执行 E2E 测试命令
- **THEN** SHALL 启动 Playwright 运行 E2E 测试
- **THEN** SHALL 在测试失败时返回非零退出码