test-spec.md 3.3 KB

测试 Spec — 租户切换用户会话循环修复

status: complete created: 2026-08-04

0. 测试原则

  • 复用仓库 JUnit 5、Mockito 和 Vitest 基线,不启动真实服务或数据库。
  • 先跑聚焦测试,再执行相关编译和前端构建。
  • 记录实际命令、结果、警告及跳过项,不把未执行的浏览器冒烟表述为通过。

1. P0 核心场景

场景 输入 预期
跨租户刷新用户 Session 用户 userId=1、当前租户为目标租户 调用 loadUserByUserId(1, targetTenantId, activeOrgId),不按用户名查询
刷新会话元数据 新构建 LoginUser 保留原登录时间、IP、客户端并写回 Session
未登录刷新 Session 无 LoginUser 返回空数据,不调用用户加载服务
前端初始化失败 用户/菜单初始化抛错 清理登录态一次,路由守卫完成一次,跳转 /login 一次
登录跳转地址 原始业务路由带 query 登录目标携带完整 fullPath,不重新进入原权限初始化分支

2. P1 集成与静态检查

  • Auth Starter 定向 JUnit 测试通过。
  • 前端定向 Vitest 与相关 JS ESLint 通过。
  • 后端 Auth Starter 聚合编译通过。
  • 前端生产构建通过。
  • git diff --check 通过,工作树既有 .DS_Store 变更未被纳入。

3. 计划命令

JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home \
PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH \
mvn -Penable-tests -pl forge-framework/forge-starter-parent/forge-starter-auth -am \
  -Dtest=AuthControllerTest -Dsurefire.failIfNoSpecifiedTests=false test
source ~/.nvm/nvm.sh
nvm use v20.19.0
pnpm exec vitest run src/router/guards/__tests__/auth-bootstrap-recovery.spec.js
pnpm exec eslint src/router/guards/permission-guard.js \
  src/router/guards/auth-bootstrap-recovery.js \
  src/router/guards/__tests__/auth-bootstrap-recovery.spec.js
pnpm build
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home \
PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH \
mvn -pl forge-framework/forge-starter-parent/forge-starter-auth -am compile -DskipTests
git diff --check

4. 跳过项

  • 不启动 Admin、MySQL、Redis,不执行真实 Token 的跨租户浏览器 E2E。
  • 部署环境需冒烟:默认租户登录 → 切换“小米连锁” → 用户信息、菜单正常 → 刷新仍保持目标租户。

5. 实际结果

范围 结果 备注
失败基线 passed(成功复现) 旧后端调用未命中 loadUserByUserId,测试 1/2 失败;前端恢复模块不存在,测试套件失败
后端定向 JUnit passed,2/2 聚合 16 模块执行;无失败或跳过的目标测试
前端定向 Vitest passed,2/2 单次恢复与登录页自重定向保护通过
前端定向 ESLint passed 首次发现文件尾多空行,修正后重跑通过
后端聚合 compile passed,16/16 modules 存在既有 Lombok Builder、deprecated 警告
前端 production build passed,8848 modules,2m35s 存在既有组件命名、CSS 注释、动态导入和 chunk 警告
差异空白检查 passed 未包含用户既有 .DS_Store 变更