docs: 更新 wiki 反映 5 角色测试结果和修复教训
Some checks failed
CI / security-audit (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled

- wiki/index.md: 更新关键数字(693 次提交/129 迁移/clippy 0 警告/角色测试完成)
- wiki/index.md: 症状导航添加 5 个已修复问题
- wiki/index.md: 文档索引添加角色测试计划/结果
- wiki/testing.md: 新增 5 角色深度测试结果表格和 7 个 BUG 修复清单
- wiki/testing.md: 历史教训添加 6 条新教训(容错/拦截同步/路径一致/权限语义/clippy/lint-staged)
This commit is contained in:
iven
2026-05-07 23:50:19 +08:00
parent 6d5a711d2c
commit 645ec39e8b
2 changed files with 74 additions and 24 deletions

View File

@@ -1,6 +1,6 @@
---
title: 测试与验证
updated: 2026-04-28
updated: 2026-05-07
status: stable
tags: [testing, verification]
---
@@ -32,9 +32,9 @@ tags: [testing, verification]
| erp-plugin | 78 | 2 | 80 | 100% | 良好 |
| erp-server | - | 153 | 153 | 94% | 良好API 集成测试) |
| **后端总计** | **611** | **153** | **772** | **97.5%** | |
| 前端 (vitest) | 36 | - | - | - | Store/Hook/API 契约/组件测试 |
| E2E (playwright) | - | 5 spec | - | - | 登录/用户管理/插件/租户隔离 |
| 小程序 | 0 | 0 | 0 | N/A | ⚠️ 完全无测试 |
| 前端 (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) |
### 编译 + 测试
@@ -128,14 +128,39 @@ SELECT count(*) FROM patient WHERE deleted_at IS NULL; -- 患者数量
## 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 |
| 小程序测试 | **0 测试**40 个页面全靠手工验证 | P1 |
| 小程序测试 | **仅 8 测试**4 BLE 单元 + 4 E2E118 源文件几乎无覆盖 | P1 |
| erp-message 集成测试 | **0 测试**SSE 推送连接/重连未测试) | P1 |
| Web 前端测试 | 仅 10 个163 文件的 API/组件/路由无覆盖) | P2 |
| Web Hooks 测试 | 15 个 Hook 仅 2 个有测试13% 覆盖) | P2 |
| Web 通用组件测试 | 11 个组件仅 1 个有测试 | P2 |
| erp-dialysis | 93% 通过率2 个测试失败待修复) | P2 |
| blind_indexes 迁移 | 9 个测试因表缺失失败(环境配置问题) | P3 |
@@ -163,6 +188,12 @@ SELECT count(*) FROM patient WHERE deleted_at IS NULL; -- 患者数量
- `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
@@ -171,6 +202,8 @@ SELECT count(*) FROM patient WHERE deleted_at IS NULL; -- 患者数量
| 日期 | 变更 |
|------|------|
| 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 | 添加微信小程序验证步骤 |