title, updated, status, tags
| title |
updated |
status |
tags |
| 测试与验证 |
2026-05-07 |
stable |
|
测试与验证
从 index 导航。关联: infrastructure database frontend erp-server erp-health
1. 设计决策
- 真实数据库优先 — 集成测试用真实 PostgreSQL,不用内存模拟
- 分层验证 — 编译检查 → 单元测试 → 功能验证 → 生产构建
- 环境配置统一由 infrastructure 管理 — 连接信息、启动命令、登录凭据见该页
2. 关键文件 + 验证清单
测试分布
| Crate |
单元测试 |
集成测试 |
总计 |
通过率 |
覆盖评估 |
| erp-core |
74 |
- |
74 |
100% |
良好(crypto/module/error/rbac/sanitize/types) |
| erp-auth |
41 |
3 |
44 |
100% |
中等 |
| erp-config |
78 |
- |
78 |
100% |
良好 |
| erp-workflow |
63 |
4 |
67 |
100% |
良好 |
| erp-message |
72 |
- |
72 |
100% |
中等(缺集成测试) |
| erp-health |
159 |
144 |
303 |
97% |
良好(9 个因 blind_indexes 表失败) |
| erp-ai |
36 |
- |
36 |
100% |
中等(缺集成测试) |
| erp-dialysis |
10 |
15 |
25 |
93% |
中等(2 个失败待修复) |
| erp-plugin |
78 |
2 |
80 |
100% |
良好 |
| erp-server |
- |
153 |
153 |
94% |
良好(API 集成测试) |
| 后端总计 |
611 |
153 |
772 |
97.5% |
|
| 前端 (vitest) |
62 |
- |
- |
- |
Store(6) + API(20) + 页面(24) + Hook(2) + 组件/工具(10) |
| E2E (playwright) |
- |
13 spec |
- |
- |
冒烟(4) + 业务流程(5) + 根目录(4) |
| 小程序 |
4 |
4 spec |
8 |
- |
BLE 模块(4 单元) + 流程测试(4 E2E) |
编译 + 测试
功能验证端点
| 端点 |
说明 |
http://localhost:3000/api/v1/health |
健康检查 |
http://localhost:3000/api/docs/openapi.json |
OpenAPI 文档 |
http://localhost:5174 |
前端页面 |
API 快速测试
前端性能基准(2026-04-18 Lighthouse)
Accessibility / SEO / Best Practices 均 100,LCP 840ms,CLS 0.02
微信小程序验证
验证点:登录成功 → 首页加载 → 各 Tab 页面可访问
3. 代码逻辑
健康模块全链路验证结果(2026-04-25)
| 链路 |
API |
前端 UI |
状态 |
| 医生 CRUD |
创建/搜索/编辑 |
医护管理页面 |
✅ |
| 排班管理 |
创建/列表/日历 |
排班管理页面 |
✅ |
| 预约管理 |
创建+状态流转 |
预约列表/新建弹窗 |
✅ |
| 随访管理 |
创建→进行→完成 |
随访列表/操作 |
✅ |
| 咨询管理 |
创建会话+消息 |
咨询列表/导出 |
✅ |
| 患者详情 |
详情/编辑/标签 |
详情页+健康数据标签 |
✅ |
erp-health validation.rs 测试覆盖
57 个纯函数测试覆盖:
- 患者信息验证(姓名、身份证、手机号、性别、血型)
- 预约验证(日期、时段、类型)
- 随访任务验证(计划日期、类型)
- 咨询会话验证
- 体征数据验证(血压范围、心率、体重、血糖)
- 文章验证
集成契约
⚡ 不变量: 功能验证需要后端服务运行中,编译检查必须先于测试通过
数据库常用查询
4. 活跃问题 + 陷阱
5 角色深度测试结果(2026-05-07)
完整结果见 docs/qa/role-test-results/
| 角色 |
测试项 |
通过 |
失败 |
通过率 |
修复状态 |
| R01 Admin |
10 |
9 |
1 |
90% |
标签刷新 UI 问题(前端缓存) |
| R02 Doctor |
5 |
5 |
0 |
100% |
— |
| R03 Nurse |
11 |
10 |
1 |
90.9% |
✅ 已修复(补充 devices.list) |
| R04 Health Manager |
10 |
9 |
1 |
90% |
✅ 已修复(仪表盘容错) |
| R05 Operator |
11 |
8 |
3 |
72.7% |
✅ 已修复(积分权限码 + 设备权限) |
修复的 BUG 清单
| BUG |
严重度 |
修复方式 |
| 患者空名称可创建 |
MEDIUM |
handler 添加 name.trim().is_empty() 校验 |
| 仪表盘统计 500 |
HIGH |
容错:单查询失败返回零值 + warn 日志 |
| FHIR 路由 404 |
HIGH |
路由从 /fhir 移到 /api/v1/fhir |
| 冻结模块后端无拦截 |
MEDIUM |
新增 frozen_module_middleware |
| 积分端点权限码错误 |
LOW |
health.health-data.list → health.points.list |
| 护士缺设备列表权限 |
MEDIUM |
迁移补充 health.devices.list |
| 运营缺积分权限 |
LOW |
迁移补充 points.list/manage |
测试覆盖空白
| 领域 |
当前状态 |
优先级 |
| erp-ai 集成测试 |
0 测试(SSE 流 + 外部 API 无法回归) |
P0 |
| 小程序测试 |
仅 8 测试(4 BLE 单元 + 4 E2E,118 源文件几乎无覆盖) |
P1 |
| erp-message 集成测试 |
0 测试(SSE 推送连接/重连未测试) |
P1 |
| Web Hooks 测试 |
15 个 Hook 仅 2 个有测试(13% 覆盖) |
P2 |
| Web 通用组件测试 |
11 个组件仅 1 个有测试 |
P2 |
| erp-dialysis |
93% 通过率(2 个测试失败待修复) |
P2 |
| blind_indexes 迁移 |
9 个测试因表缺失失败(环境配置问题) |
P3 |
测试覆盖良好的领域
| 领域 |
测试特点 |
| 患者 CRUD |
完整集成测试覆盖创建/更新/删除/列表 |
| PII 加密 |
独立测试文件验证加密/解密/盲索引/跨租户隔离 |
| 预约并发 |
CAS 原子操作测试,验证乐观锁和排班满额 |
| 工作流引擎 |
BPMN 解析 + Token 驱动 + 任务分配测试 |
| 权限 RBAC |
角色/权限/菜单关联测试 |
| 插件系统 |
WASM 运行时 + 动态表 CRUD + 租户隔离 |
活跃问题
| 问题 |
级别 |
状态 |
| display_name 存储 XSS HTML |
P1 |
待修复 |
| antd vendor chunk 2.9MB (gzip ~400KB) |
P3 |
待优化 |
历史教训
- CRM 权限码与实体名不一致 → 403(详见 wasm-plugin 权限命名铁律)
AppError::Internal 无日志 → 500 静默(已加 tracing::error)
build_scope_sql 参数索引硬编码 → SQL 参数错位(已动态化)
- 已应用迁移文件被删除 → 启动失败(创建 stub 迁移修复)
- 聚合接口必须容错:仪表盘/统计类接口不应一个子查询失败导致整体 500。
unwrap_or_else + tracing::warn 模式
- 前后端拦截必须同步:FROZEN_ROUTES 前端守卫 + 后端中间件缺一不可,否则直接调 API 可绕过
- 路由注册路径一致性:所有 API 必须在
/api/v1/ 下,FHIR 不例外。注册时用 grep 检查路径
- 权限码要语义匹配:积分端点用积分权限码,不要借用其他模块的权限码(
health.health-data.list ≠ health.points.list)
- 后端验证不可省:前端做了空值检查不等于后端可以跳过。每个 handler 入口必须验证必填字段
- clippy 0 警告是基线:持续积累 warning 变成雪崩,修复成本远高于即时处理。
cargo clippy --workspace -- -D warnings 应无输出
⚠️ 首次 cargo run 需编译整个 workspace(含 wasmtime),后续增量快
⚠️ Redis 不可达时限流自动降级为 fail-open
5. 变更记录
| 日期 |
变更 |
| 2026-05-07 |
5 角色深度测试 + 7 BUG 修复 + clippy 全 workspace 清零 + lint-staged 修复 |
| 2026-05-07 |
全面刷新:前端 62 测试文件 + 13 E2E spec / 小程序 4 BLE 单元 + 4 E2E / 更新测试覆盖空白清单 |
| 2026-05-01 |
审计数据全面刷新:772 测试(611 单元 + 153 集成)/ 97.5% 通过率 / 9 个因 blind_indexes 失败 / 前端仅 10 个测试 / 小程序 0 测试 |
| 2026-04-25 |
全面更新:93 后端测试 + 3 前端测试、健康模块全链路验证结果、测试覆盖空白清单 |
| 2026-04-24 |
添加微信小程序验证步骤 |
| 2026-04-23 |
重构为 5 节结构,去除与 infrastructure.md 重复 |
| 2026-04-18 |
Lighthouse 审计 + 性能优化 |