# 测试覆盖率报告 **生成日期:** 2026-06-08 **分支:** master (rebased on origin/master) **备注:** 全部测试通过,当前后端单元测试共计 221 条。新增分佣全流程测试 6 条(推荐码绑定 ×2 + 三级链路 ×1 + B端全链路 ×1 + 跳过场景 ×2),覆盖从注册→付费→佣金分配的完整调用链。 ## 总览 | 套件 | 运行 | 通过 | 失败 | 错误 | 跳过 | |------|------|------|------|------|------| | 后端单元测试 | 215 | 215 | 0 | 0 | 5 | | Admin API 测试 | 6 | 6 | 0 | 0 | 0 | | Playwright E2E (admin) | 3 | 3 | 0 | 0 | 0 | | **合计** | **221** | **221** | **0** | **0** | **5** | ## 后端测试详情 ### ControllerIntegrationTest(控制层集成测试) | Controller | 测试数 | 覆盖情况 | |------------|--------|----------| | AuthController | 6 | 登录流、Token 鉴权、拦截器 | | ChartController | 6 | 创建、详情、删除、列表、解读、重新生成 | | ChatController | 2 | 发送消息、聊天历史 | | PayController | 2 | 创建订单、回调通知 | | ProfileController | 10 | 信息、VIP 状态、配额(vip/non-vip)、佣金统计、图表数量、资料完善/更新、分享追踪 | | CommissionController | 3 | 列表、汇总、统计(含 team 空/非空) | | WithdrawController | 3 | 申请、列表、余额 | | AnnotationController | 6 | 添加、列表、删除、标签增删查 | | ExportController | 4 | 缺失recordId、非VIP、非所有者、成功导出PDF | | PricingController | 2 | 当前定价、升级定价 | | | **44** | | ### AdminControllerApiTest(管理后台接口测试) | 端点 | 测试数 | 覆盖情况 | |------|--------|----------| | 管理后台 API | 27 | 配置管理、用户管理、订单管理等 | | | **+6** | 权限拦截、跨域、健康检查、文件不存在等 | | **合计** | **33** | | ### 服务层测试 | Service | 测试数 | 跳过 | 覆盖重点 | |---------|--------|------|----------| | CalculatorServiceTest | 16 | 2 | 能量盘计算 24 位置 | | ChartServiceTest | 18 | 0 | 咨询 CRUD、鉴权 | | ChatServiceTest | 7 | 0 | AI 对话、配额检查 | | CommissionServiceTest | 15 | 3 | 佣金列表、汇总、**统计仪表盘(日期/团队/转化)** | | ConfigServiceTest | 9 | 0 | 配置 CRUD | | DifyServiceTest | 5 | 0 | Dify API 调用 | | OrderServiceTest | **27** | 0 | 订单创建、**分佣逻辑全覆盖(B端/C端/超级会员/幂等/跳过/三级链路/升级补差)** | | UserServiceTest | **22** | 0 | 登录注册、VIP状态、配额、**推广码绑定(含自邀跳过)**、referralCode 自动生成 | | WithdrawServiceTest | 7 | 0 | 提现申请、列表、余额校验 | | **合计** | **126** | **5** | | ## 分佣金体系测试矩阵 ### 佣金计算分支覆盖 | 场景 | 级别 | 测试方法 | 验证点 | |------|------|----------|--------| | B端固定佣金(能量师 practitioner) | L1=¥500, L2=¥100 | `testPaySuccess_bEndCommission_fixed` | 固定金额 | | B端二级链路 | L1 + L2 同时产生 | `testPaySuccess_bEndCommission_level2` | 两级佣金分配 | | C端比例佣金(annual, 40%+5%) | L1=40%, L2=5% | `testPaySuccess_cEndCommission_percentages` | 百分比金额 | | C端二级链路 | L1 + L2 | `testPaySuccess_cEndCommission_level2` | 逐级传递 | | 幂等 | 相同(orderId,level,toUserId) | `testPaySuccess_idempotency` | 不重复创建 | | 缺vipType | 无产品类型 | `testPaySuccess_bEnd_noVipType_skipsCommission` | 跳过 | | C端半额 | annual 续费半价 | `testPaySuccess_bEnd_cendHalfAmount` | 金额减半 | | 未知vipType | 非标 productType | `testPaySuccess_bEnd_unknownVipType_skips` | 跳过 | | 无推广码引荐 | C端 inviter.referralCode==null | `testPaySuccess_cEnd_noReferralCode_skips` | 跳过 | | 上级无码跳L2 | C端上级无 referralCode | `testPaySuccess_cEnd_upperNoReferralCode_skipsL2` | 仅L1 | | 超级会员 L1 | super_member 30% | `testPaySuccess_superMemberCommission_l1` | 百分比 | | 超级会员 L2 | 5% + 引荐人未付费 | `testPaySuccess_superMemberCommission_l2` | 两步链 | | B端幂等 | 同订单重复调用 | `testPaySuccess_bEnd_idempotentCommission` | 不重复 | | B端升级补差 | practitioner 升级补差价 | `testPaySuccess_bEndUpgrade_deduction` | 44760 | | B端补差归零 | 已付超默认 L1 | `testPaySuccess_bEndUpgrade_zeroDeduction` | 归零 | ### 分佣全流程测试(新) | 场景 | 流程 | 测试方法 | 验证点 | |------|------|----------|--------| | **C端三级链路** | A(有码)→B→C, B付annual | `testCommissionFlow_cEnd_threeTier` | A获L1=5240, C获L2=655 | | **B端全链路** | B(能量师)→A, A付practitioner | `testCommissionFlow_bEnd_fullPipeline` | B获L1=50000, C获L2=10000 | | **引荐人未付费跳过** | 上级无referralCode | `testCommissionFlow_inviterNotPaid_skipsCommission` | 不产生佣金 | | **自然流量无佣金** | buyer无invitedBy | `testCommissionFlow_naturalFlow_noCommission` | 不产生佣金 | | **B端升级分阶段** | 先付annual→升级practitioner | `testCommissionFlow_bEnd_upgradeDeduction_chain` | 5240+44760=50000=默认L1, 不超额 | | **推广码注册** | 用户携码注册 | `testLoginOrRegister_withReferralCode` | invitedBy绑定+directCount递增 | | **自邀跳过** | 用户填自己推广码 | `testLoginOrRegister_selfReferral_doesNotBind` | 不绑定+不计directCount | ### CommissionService 统计 | 场景 | 测试方法 | 验证点 | |------|----------|--------| | 完整仪表盘 | `testGetStats_fullDashboard` | 团队人数、直接/间接、佣金汇总、VIP转化统计 | | 无团队 | `testGetStats_noTeam` | 各项归零 | | 仅为会员无团队 | `testGetStats_vipOnly` | 团队为空 | | 日期过滤 | `testGetStats_dateFiltering` | 近7天/30天/本年度 | | VIP转化统计 | `testGetStats_vipConversion` | 转化率、新会员数 | | 今日统计 | `testGetStats_todayStats` | 今日新增佣金、团队人数 | ## 前端 E2E 测试 | 测试 | 状态 | |------|------| | 管理后台页面加载 | ✅ | | 核心操作流程 | ✅ | | 数据展示验证 | ✅ | ## 主题切换修复(v20260608) | 页面 | 修复项 | 说明 | |------|--------|------| | `client/pages/commission/index.vue` | `.section` 背景 `#fff` → `--color-bg-card` | 卡片不跟主题切换 | | | `.section-sub`, `.comm-amount`, `.comm-remark`, `.tool-arrow` | 硬编码字体颜色 → CSS 变量 | | | 状态徽章 `.status-settled/pending/available` | 背景和文字颜色 → 语义变量 | | `client/pages/withdraw/index.vue` | `.input-section`, `.rules-card` 背景 `#fff` → `--color-bg-card` | 卡片不跟主题切换 | | | `.hint-link` `#3B82F6` → `--color-info` | 链接颜色 | | | `.error-text` `#EF4444` → `--color-danger` | 错误提示颜色 | | **剩余已知问题** | `client/pages/profile/` 仍有 `#FEF3C7`, `#E5E7EB`, `#F9FAFB` 等硬编码 | 需后续处理 | | | `client/pages/relations/*.vue` 21处 `color: #FFFFFF` | 部分在深色背景上可保留,需逐一确认 | ## 已知缺口 | 区域 | 问题 | 优先级 | |------|------|--------| | `ExportService` | 无单元测试 | 低 | | `client/` 前端小程序 | 无自动化 E2E 测试(需微信小程序环境) | 中 | | `WxPayService` | 无单元测试(189行,支付核心) | 高 🔴 | | `RelationAnalysisService` | 新模块,尚无单元测试 | 中 | | `CalculatorServiceTest` | 2个 @Disabled 外部位置测试 | 低 | | `CommissionServiceTest` | 3个 @Disabled 状态流转测试 | 低 |