Celoria Test Architecture

← Back to Notes

项目分层架构与测试覆盖范围一览

1. 分层架构 & 测试覆盖

REQUEST FLOW & TEST COVERAGE MAP Client Layer Browser (Next.js) | Flutter Guest/Employee/Kiosk App | Frontend Layer React Components | Hooks | Stores | Pages | i18n | HTTP API Route Layer Express Routes | Request Validation | Response Format | Middleware Layer Auth | RBAC Permission | Tenant Context | Rate Limit | Service Layer (Business Logic) payrollService | bookingService | guestAuthService | ... | Data Access Layer tenantDb.query() | platformDb.query() | pool | Transactions | SQL Database PostgreSQL 15 | Schema-per-tenant | Migrations E2E Test FE Unit API Unit Integration MOCK ZONE Unit + API 测试 在这里 mock 掉 DB REAL DB Integration 测试 连接真实 PostgreSQL E2E (Playwright/Flutter) Frontend Unit (Jest+Vitest) API Test (Jest+Mock) Unit Test (Jest) Integration (Jest+RealDB)

2. 各类测试详解

Unit Test — 单元测试

187 suites 4,881 tests ~30s FAST
  • 测试 单个函数/方法 的输入输出
  • 所有外部依赖全部 mock(DB、Redis、外部 API)
  • 目录: backend/tests/unit/
  • 覆盖: Service 层 — payrollService, guestAuthService, ...
  • 覆盖: 工具类 — error-loader, hash, validators
  • 覆盖: 中间件 — auth-middleware, permission-middleware
  • 举例: hashPassword('abc') === '$2b$...'
  • 举例: calculateOvertime(records) === 2.5

API Test — 接口测试

97 suites 3,197 tests ~2min FAST
  • 测试 HTTP 请求/响应 的完整链路
  • 用 supertest 或 mock req/res 模拟请求
  • DB 层被 mock,不连真实数据库
  • 目录: backend/tests/api/
  • 验证: 状态码 (200/400/401/403/404/500)
  • 验证: 响应 JSON 结构和字段
  • 验证: 参数校验和错误消息
  • 验证: 中间件链 (auth + permission + handler)

Frontend Unit Test — 前端单元测试

74 + 33 suites ~2min FAST
  • 测试 React 组件、Hooks、Stores、整页渲染
  • Jest (74 suites): 小组件、Hooks、工具函数
  • Vitest (33 suites): 页面级组件渲染(*.integration.test.tsx)
  • 两套框架都用 JSDOM + MSW mock API,同属前端单元层
  • 目录: frontend/web_app/src/__tests__/
  • 验证: 组件渲染、用户交互、状态变更
  • 验证: Hook 逻辑、Store 计算属性、页面整体功能
  • 举例: 点击"取消"按钮 → 对话框关闭
  • 举例: 打开 Admin Dashboard 页 → 验证各卡片渲染

Integration Test — 集成测试

62 suites ~10-15min MEDIUM
  • 测试 多层协作:API → Service → 真实 DB
  • 连接真实 PostgreSQL,执行真实 SQL
  • --runInBand 串行执行避免冲突
  • 目录: backend/tests/integration/
  • 验证: 数据真正写入和读取数据库
  • 验证: 事务回滚、约束检查、并发控制
  • 举例: 创建预约 → 查询 DB → 确认记录存在
  • 举例: 日结 → 验证所有表的金额一致

E2E Test — 端到端测试

99 specs (Web) + 24 (Flutter) ~20-30min SLOW
  • 测试 用户真实操作流程:打开浏览器/App
  • Web: Playwright 驱动 Chromium 浏览器
  • Mobile: Flutter Integration Test 驱动真机/模拟器
  • 所有层都是真实的(前端+后端+数据库)
  • 验证: 完整的用户故事(登录 → 操作 → 验证结果)
  • 举例: 打开预约页 → 选服务 → 选时间 → 确认 → 验证成功
  • 举例: 员工 App 打卡 → 查看时间记录 → 申请补卡
  • 失败时有截图和视频录制

Sync / Performance Test — 同步 & 性能测试

5 suites ~5-10min MEDIUM
  • Sync: 测试数据同步引擎的正确性
  • Performance: 测试高负载下的性能表现
  • 连接真实数据库,串行执行
  • 超时设置更长 (60s / 120s)
  • 目录: backend/tests/sync/ & performance/
  • 举例: 批量同步 1000 条预约的耗时和正确性

3. 测试类型对比

特性 Unit API Frontend Unit Integration E2E
速度 ~30s ~2min ~2min ~15min ~30min
数据库 Mock Mock N/A Real PG Real PG
HTTP 请求 ✓ supertest/mock ✓ supertest ✓ 真实浏览器
前端渲染 ✓ JSDOM ✓ 真实浏览器
中间件链 部分 (单独测) ✓ 完整 ✓ 完整 ✓ 完整
适合场景 纯函数逻辑
算法/工具
路由/校验
状态码/响应
组件/Hook
交互/状态
数据流完整性
事务/约束
用户故事
端到端流程
开发时使用 ✓ 常用 ✓ 常用 ✓ 常用 提交前跑 CI / 发布前
Dashboard 按钮 Backend Quick Backend Quick Frontend Unit Integration 未集成
框架 Jest Jest Jest + Vitest Jest (runInBand) Playwright / Flutter
测试文件数 187 97 107 (74+33) 62 123 (99+24)

4. 测试金字塔

E2E 123 files | Slow | High confidence Integration 62 files | Medium | Real DB Unit + API + Frontend Unit 391 files | Fast | Mock everything ← 少但全面 ← 适中 ← 多且快速 SPEED → CONFIDENCE → 底层测试数量多、速度快;顶层测试信心高、但慢 日常开发跑底层 (Unit+API) — 提交/CI 跑中上层

5. 一个请求的完整生命周期

Browser 用户点击按钮 React fetch('/api/...') Express Route router.post() Middleware auth + permission Service business logic Data Access tenantDb.query() PostgreSQL SELECT / INSERT E2E — 覆盖所有层 (真实环境) API Test — Route → Middleware → Service (DB mock) Unit — Middleware + Service + DAL (DB mock)
Generated: 2026-02-06 • Test DashboardNotes Home