1
0
Files
nex/openspec/specs/frontend-testing/spec.md
lanyuanxiaoyao 870004af23 feat: 现代化 UI 布局,实现侧边栏导航和统计仪表盘
- 重构 AppLayout 为可折叠侧边栏导航布局
- 实现统计仪表盘:统计摘要卡片 + 请求趋势图表
- Provider 页面使用 Card 包裹优化视觉层次
- 主题切换按钮移至侧边栏底部,支持折叠态
- Header 适配暗色主题,添加分隔线优化视觉过渡
- 添加全局样式重置(SCSS)
- 完善组件测试和 E2E 测试覆盖
- 同步 OpenSpec 规范到主 specs
2026-04-16 19:24:02 +08:00

7.4 KiB
Raw Blame History

前端测试体系

Purpose

建立前端测试体系,覆盖单元测试、组件测试和 E2E 测试,确保前端代码质量和功能正确性。

Requirements

Requirement: 建立前端单元测试体系

前端 SHALL 使用 Vitest 建立单元测试体系,覆盖 API 层和自定义 Hooks。

Scenario: API 客户端单测

  • WHEN 运行 api/client.ts 的单元测试
  • THEN SHALL 覆盖 request() 的正常响应解析
  • THEN SHALL 覆盖 HTTP 错误状态码4xx、5xx的 ApiError 抛出
  • THEN SHALL 覆盖网络错误的错误处理
  • THEN SHALL 覆盖 snake_case → camelCase 响应字段转换
  • THEN SHALL 覆盖 camelCase → snake_case 请求字段转换

Scenario: API 模块单测

  • WHEN 运行 api/providers.ts、api/models.ts、api/stats.ts 的单元测试
  • THEN SHALL 覆盖所有 CRUD 函数的正确调用
  • THEN SHALL 覆盖参数传递和返回值类型

Scenario: 自定义 Hooks 单测

  • WHEN 运行 hooks/ 目录下的单元测试
  • THEN SHALL 使用 @tanstack/react-query 的 renderHook 测试工具
  • THEN SHALL 覆盖 useQuery 数据获取(成功和失败)
  • THEN SHALL 覆盖 useMutation 写操作后的缓存失效
  • THEN SHALL 使用独立的测试 QueryClient关闭 retry 和缓存)

Requirement: 建立前端组件测试体系

前端 SHALL 使用 React Testing Library 建立组件测试体系。

Scenario: ProviderTable 组件测试

  • WHEN 运行 ProviderTable 组件测试
  • THEN SHALL 验证供应商列表正确渲染
  • THEN SHALL 验证点击"添加"按钮弹出 Modal
  • THEN SHALL 验证点击"编辑"按钮弹出预填充的 Modal
  • THEN SHALL 验证删除操作触发 Popconfirm 确认

Scenario: ProviderForm 组件测试

  • WHEN 运行 ProviderForm 组件测试
  • THEN SHALL 验证表单校验规则必填字段、URL 格式)
  • THEN SHALL 验证提交成功后调用 onSave 回调
  • THEN SHALL 验证编辑模式下字段预填充

Scenario: StatsTable 组件测试

  • WHEN 运行 StatsTable 组件测试
  • THEN SHALL 验证筛选条件交互(供应商选择、日期范围)
  • THEN SHALL 验证统计数据正确展示

Requirement: 建立 E2E 测试体系

前端 SHALL 使用 Playwright 建立端到端测试体系。

Scenario: 供应商管理 E2E 测试

  • WHEN 运行供应商管理的 E2E 测试
  • THEN SHALL 测试完整的供应商创建流程
  • THEN SHALL 测试供应商编辑流程
  • THEN SHALL 测试供应商删除流程(含确认弹窗)
  • THEN SHALL 测试供应商展开后的模型管理

Scenario: 统计查询 E2E 测试

  • WHEN 运行统计查询的 E2E 测试
  • THEN SHALL 测试页面加载和默认数据展示
  • THEN SHALL 测试按供应商筛选
  • THEN SHALL 测试按日期范围筛选

Requirement: 使用 MSW 进行 API Mock

前端测试 SHALL 使用 MSW (Mock Service Worker) 模拟后端 API 响应。

Scenario: 测试环境 MSW 配置

  • WHEN 初始化测试环境
  • THEN SHALL 配置 MSW server 处理所有 /api/* 请求
  • THEN SHALL 在 setup.ts 中全局启动和清理 MSW server

Scenario: Mock 响应定义

  • WHEN 编写需要 API 交互的测试
  • THEN SHALL 使用 MSW handler 定义期望的 API 响应
  • THEN SHALL 支持成功和失败两种响应场景
  • THEN SHALL 在每个测试用例后重置 handler

Requirement: 测试文件组织

前端测试文件 SHALL 按层级组织在 src/tests/ 目录下。

Scenario: 目录结构

  • WHEN 组织测试文件
  • THEN src/tests/setup.ts SHALL 包含全局测试配置
  • THEN src/tests/api/ SHALL 包含 API 层单测
  • THEN src/tests/hooks/ SHALL 包含 Hooks 单测
  • THEN src/tests/components/ SHALL 包含组件测试
  • THEN e2e/ 目录项目根目录下SHALL 包含 Playwright E2E 测试

Requirement: Vitest 配置

前端 SHALL 配置 Vitest 作为测试运行器。

Scenario: 测试环境配置

  • WHEN 运行 vitest
  • THEN SHALL 使用 jsdom 作为测试环境
  • THEN SHALL 配置 setupFiles 指向 src/tests/setup.ts
  • THEN SHALL 配置路径别名 @/ 与 tsconfig 一致
  • THEN SHALL 配置 @testing-library/jest-dom 匹配器

Scenario: 覆盖率配置

  • WHEN 运行覆盖率报告
  • THEN SHALL 使用 @vitest/coverage-v8 提供者
  • THEN SHALL 覆盖 src/ 下的所有源文件

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 为统计仪表盘的新增组件建立测试覆盖。

Scenario: StatCards 组件测试

  • WHEN 运行 StatCards 组件测试
  • THEN SHALL 验证统计数据正确渲染(总请求量、活跃模型数、活跃供应商数、今日请求量)
  • THEN SHALL 验证空数据时的渲染行为

Scenario: UsageChart 组件测试

  • WHEN 运行 UsageChart 组件测试
  • THEN SHALL 验证图表组件正确渲染
  • THEN SHALL 验证空数据时的渲染行为

Requirement: 建立前端组件测试覆盖

前端 SHALL 使用 React Testing Library 建立组件测试覆盖。

Scenario: 页面组件测试覆盖

  • WHEN 运行前端组件测试
  • THEN SHALL 覆盖 ProviderTable 的列表渲染和交互操作
  • THEN SHALL 覆盖 ProviderForm 的表单校验和提交
  • THEN SHALL 覆盖 ModelForm 的表单校验和提交
  • THEN SHALL 覆盖 StatsTable 的筛选和数据展示
  • THEN SHALL 覆盖 StatCards 的统计摘要渲染
  • THEN SHALL 覆盖 UsageChart 的趋势图表渲染

Requirement: 建立前端 E2E 测试覆盖

前端 SHALL 使用 Playwright 建立 E2E 测试覆盖。

Scenario: 供应商管理 E2E 覆盖

  • WHEN 运行 E2E 测试
  • THEN SHALL 覆盖供应商创建、编辑、删除的完整用户流程
  • THEN SHALL 覆盖模型创建、编辑、删除的完整用户流程

Scenario: 统计查询 E2E 覆盖

  • WHEN 运行 E2E 测试
  • THEN SHALL 覆盖统计页面的加载和筛选查询流程
  • 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 在测试失败时返回非零退出码