Files
hms/wiki/testing.md
iven ec87ae85cf docs(wiki): 全量 wiki 更新 — C1 晚间血压已修复标记 + 数据校正
- miniprogram.md: 晚间血压 CRITICAL 标记为已修复
- index.md: 症状导航表更新
- architecture/database/erp-core/erp-health/frontend/testing: 同步更新
2026-05-03 19:32:30 +08:00

179 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 测试与验证
updated: 2026-04-28
status: stable
tags: [testing, verification]
---
# 测试与验证
> 从 [[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) | 5 | - | - | - | 健康常量/useThemeMode/useDebouncedValue/StatusTag/exprEvaluator |
| E2E (playwright) | - | 5 spec | - | - | 登录/用户管理/插件/租户隔离 |
| 小程序 | 0 | 0 | 0 | N/A | ⚠️ 完全无测试 |
### 编译 + 测试
```bash
cargo check # 编译无错误
cargo test --workspace # 全量测试
cargo clippy -- -D warnings # Lint 无警告
cargo fmt --check # 格式检查
cd apps/web && pnpm build # 前端生产构建
cd apps/web && pnpm test # 前端单元测试 (vitest)
cd apps/web && pnpm test:e2e # E2E 测试 (playwright)
```
### 功能验证端点
| 端点 | 说明 |
|------|------|
| `http://localhost:3000/api/v1/health` | 健康检查 |
| `http://localhost:3000/api/docs/openapi.json` | OpenAPI 文档 |
| `http://localhost:5174` | 前端页面 |
### API 快速测试
```bash
# 登录获取 Token
curl -s http://localhost:3000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"Admin@2026"}'
```
### 前端性能基准2026-04-18 Lighthouse
Accessibility / SEO / Best Practices 均 100LCP 840msCLS 0.02
### 微信小程序验证
```bash
cd apps/miniprogram && pnpm build:weapp # 构建
# 在微信开发者工具中打开 apps/miniprogram 项目
# 点击"编译" → 勾选协议 → 点击"微信一键登录"
```
验证点:登录成功 → 首页加载 → 各 Tab 页面可访问
## 3. 代码逻辑
### 健康模块全链路验证结果2026-04-25
| 链路 | API | 前端 UI | 状态 |
|------|-----|---------|------|
| 医生 CRUD | 创建/搜索/编辑 | 医护管理页面 | ✅ |
| 排班管理 | 创建/列表/日历 | 排班管理页面 | ✅ |
| 预约管理 | 创建+状态流转 | 预约列表/新建弹窗 | ✅ |
| 随访管理 | 创建→进行→完成 | 随访列表/操作 | ✅ |
| 咨询管理 | 创建会话+消息 | 咨询列表/导出 | ✅ |
| 患者详情 | 详情/编辑/标签 | 详情页+健康数据标签 | ✅ |
### erp-health validation.rs 测试覆盖
57 个纯函数测试覆盖:
- 患者信息验证(姓名、身份证、手机号、性别、血型)
- 预约验证(日期、时段、类型)
- 随访任务验证(计划日期、类型)
- 咨询会话验证
- 体征数据验证(血压范围、心率、体重、血糖)
- 文章验证
### 集成契约
| 方向 | 模块 | 触发时机 |
|------|------|---------|
| 依赖 ← | [[infrastructure]] | 环境准备、连接信息 |
| 验证 → | [[erp-server]] | 健康检查、API 测试 |
| 验证 → | [[frontend]] | 生产构建 |
| 验证 → | [[erp-health]] | 健康模块全链路验证 |
**不变量**: 功能验证需要后端服务运行中,编译检查必须先于测试通过
### 数据库常用查询
```bash
# 连接数据库
D:\postgreSQL\bin\psql.exe -U postgres -h localhost -d erp
```
```sql
SELECT version FROM seaql_migrations ORDER BY version; -- 迁移记录(应为 50 条)
SELECT code, name FROM permissions WHERE deleted_at IS NULL ORDER BY code; -- 权限列表
SELECT count(*) FROM patient WHERE deleted_at IS NULL; -- 患者数量
```
## 4. 活跃问题 + 陷阱
### 测试覆盖空白
| 领域 | 当前状态 | 优先级 |
|------|---------|--------|
| erp-ai 集成测试 | **0 测试**SSE 流 + 外部 API 无法回归) | P0 |
| 小程序测试 | **0 测试**40 个页面全靠手工验证) | P1 |
| erp-message 集成测试 | **0 测试**SSE 推送连接/重连未测试) | P1 |
| Web 前端测试 | 仅 10 个163 文件的 API/组件/路由无覆盖) | 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 迁移修复)
⚠️ 首次 `cargo run` 需编译整个 workspace含 wasmtime后续增量快
⚠️ Redis 不可达时限流自动降级为 fail-open
## 5. 变更记录
| 日期 | 变更 |
|------|------|
| 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 审计 + 性能优化 |