--- 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 均 100,LCP 840ms,CLS 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 审计 + 性能优化 |