test-spec.md 6.0 KB

单测 Spec — 用户反馈平台问题修复

status: complete created: 2026-07-15

0. 测试原则

  • 先复用仓库已有前端 Vitest、generator JUnit 和构建基线,不启动真实 Admin/Flow/MySQL/Redis。
  • 低成本静态检查先行,再执行定向单测、相关模块聚合编译和前端生产构建。
  • 加解密开关按安全变更处理:覆盖关闭、开启和配置端点失败时保持默认开启三类场景。
  • 导入进度区分文件上传和服务端处理,不用模拟数值冒充后端逐行进度。
  • 所有命令、结果、警告和跳过项追加到 execution-log.md

1. 测试框架

项目
前端 Vitest + Vue 3;Node v20.19.0
后端 JUnit 5 / Spring Boot Test(Excel、Crypto Starter 独立执行)
Excel EasyExcel 写入,Apache POI/工作簿读取验证
SQL xmllint + 静态契约检查;不连接真实 MySQL

2. 覆盖范围

P0 — 核心业务逻辑

类/模块 场景 输入 预期结果
message-notification-utils.js 未完成流程消息 FLOW_TODO/readFlag=0 可显示并触发审批
message-notification-utils.js 已办流程消息 FLOW_TODO/readFlag=1 不显示、不触发审批
import-utils.js 超过 20 行预览 表头 + 25 行 总行数 25、只返回前 20 行
import-utils.js 动态/通用错误字段兼容 message/errorMessagelabel/columnName 统一为可渲染错误行
crypto-config.js 后端全局关闭 enabled=false 前端 enabled=false、防重放按返回配置同步
crypto-config.js API 子开关关闭 enabled=true, enableApiCrypto=false 前端 API 加密关闭
crypto-config.js 配置加载失败 请求异常 保持静态 enabled=true,不降级明文
ExcelImportTemplateWriter 生成导入模板 必填、可选两列 两个工作表、样例行、字段说明均存在
CryptoEncryptorLifecycleTest 关闭状态启动 enabled=false + 无效 SM4/AES/RSA 历史值 加密器和 RSA Holder 可创建,不在启动阶段校验无效密钥
CryptoEncryptorLifecycleTest 运行时重新开启 先关闭并设置无效值,再切换有效 16 字节密钥 同一 SM4/AES 实例读取最新密钥并完成加解密往返

P1 — 数据访问层

  • SysUserOrgRoleMapper.xml 通过 XML 语法检查。
  • selectRoleNamesByUserOrg 不再使用 SELECT DISTINCT r.role_name
  • 查询包含 GROUP BY r.id, r.role_name, r.sort 和原排序条件。

P2 — 入口与集成层

  • forge-starter-cryptoforge-starter-configforge-starter-authforge-starter-excel 通过 Admin reactor 聚合编译。
  • 前端生产构建覆盖新导入弹窗、运行配置启动加载、消息和模型页面。
  • 不启动真实服务;/crypto/config 匿名访问、配置切换真实密文/明文与用户关联管理接口由用户环境做 E2E 回填。

3. 执行计划

  • Step 1: 执行新增前端纯函数测试并确认修复后通过。
  • Step 2: 执行 Excel 模板生成测试并确认两个工作表协议。
  • Step 3: 执行 Mapper XML 与 SQL 静态检查。
  • Step 4: 执行 Admin reactor package 与前端 production build。
  • Step 5: 执行 git diff --check,回填文档状态与执行证据。

4. 历史验证基线

时间 范围 命令 结果 备注
2026-07-15 前 当前工作区 app-first-lowcode-workbench/execution-log.md 多阶段历史构建通过,但当前工作区此后仍有大量未提交差异 本变更必须重新验证目标差异,不能直接复用为最终结论

5. 本轮增量验证

时间 变更范围 必跑项 实际命令 结果 跳过/警告
2026-07-15 前端纯函数 Vitest pnpm exec vitest run src/components/ai-form/__tests__/import-utils.spec.js src/layouts/components/__tests__/message-notification-utils.spec.js src/utils/crypto/__tests__/crypto-config.spec.js passed,3 files / 11 tests
2026-07-15 Excel 模板 JUnit JAVA_HOME=...17... mvn -pl forge-framework/forge-starter-parent/forge-starter-excel -Penable-tests -Dtest=ExcelImportTemplateWriterTest test passed,1 test 首次未指定 Java 17 失败,修正环境后通过
2026-07-15 SQL XML/静态契约 xmllint --noout .../SysUserOrgRoleMapper.xml + rg passed 未连接真实 MySQL
2026-07-15 前端差异 ESLint pnpm exec eslint <本轮相关前端文件> passed
2026-07-15 后端集成 Admin reactor package JAVA_HOME=...17... mvn -pl forge-admin-server -am package -DskipTests passed,42/42 modules 测试按命令跳过;存在既有 deprecated/unchecked 警告
2026-07-15 前端集成 production build source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm build passed,8684 modules 既有组件命名冲突、CSS 注释及 chunk 警告;脚本内部将 heap 设为 40961MB
2026-07-15 差异卫生 空白检查 git diff --check passed 工作区原有大量未提交改动均保留
2026-07-16 加解密关闭启动回归 Crypto Starter JUnit JAVA_HOME=...17... mvn -pl forge-framework/forge-starter-parent/forge-starter-crypto -Penable-tests -Dtest=CryptoEncryptorLifecycleTest test passed,3/3 未启动真实服务
2026-07-16 主应用装配 Admin reactor package JAVA_HOME=...17... mvn -pl forge-admin-server -am package -DskipTests passed,42/42 modules 测试按命令跳过;存在既有 deprecated/unchecked 警告

6. 执行证据

  • execution-log.md:同目录增量追加。
  • 关键接口:静态检查 /crypto/config/api/config/manage/crypto 契约;真实 HTTP 留待用户环境。
  • 关键数据库检查:无 Flyway 变更;用户关联管理 SQL 不连接真实 MySQL。
  • 服务启动与停止:计划不启动服务。