test-spec.md 9.4 KB

测试 Spec — 低代码业务交易闭环能力补齐

status: apply_completed created: 2026-07-03

1. 测试原则

  • code-copilot/rules/automated-testing-standard.md 执行增量验证。
  • 核心后端逻辑必须有定向单测,且 Maven 日志必须显示实际 Tests run
  • 前端本轮涉及运行态组件和设计器时执行 pnpm build
  • 不把采购仓储业务名写入平台单测类名,采购仓储只进入验收文档。

2. P0 单测范围

ForeachActionStepExecutor

场景 输入 预期
集合为空 collectionPath=formData.items,items 为空 返回 SUCCESS,执行 0 行
集合不存在 collectionPath=formData.items,items 缺失 返回 SUCCESS,执行 0 行
两行成功 items 两行,子步骤 Mock 成功 返回两组行结果,子步骤执行 2 次
子步骤失败 第二行子步骤抛异常 父步骤失败并触发事务回滚
循环变量 子步骤映射 ${item.quantity}${index} 子步骤收到当前行数量和索引
深度限制 FOREACH 中嵌套超过允许深度 抛业务异常

BusinessRecordSelectorService

场景 输入 预期
单字段关键词 keywordFields=["name"] 兼容旧查询
多字段关键词 keywordFields=["code","name"] 按 OR 查询
非法字段 keywordFields=["tenant_id"] 字段被过滤或拒绝
动态过滤 searchParams={"warehouseId":"${formData.warehouseId}"} 解析为实际仓库 ID
无权限 目标对象无 VIEW 权限 抛业务异常

本轮后端关键词归一逻辑使用无 Mockito 的 BusinessRecordSelectorSearchParamsTest 覆盖;运行态动态过滤由 record-selector-utils.js 与前端构建覆盖。既有 BusinessRecordSelectorServiceTest 依赖 Mockito inline,本地 JDK agent attach 受限,未纳入本轮组合命令。

BusinessQuantityQueryService

场景 输入 预期
余额查询 accountCode + itemCode 返回余额分页
流水查询 sourceObjectCode + sourceRecordId 返回来源流水
锁定查询 lockStatus=LOCKED 返回锁定记录
空条件 无查询条件 仍按租户分页,不跨租户

3. 前端验证范围

  • BusinessActionDesigner.vue:循环明细步骤模板可插入并格式化。
  • AiRecordSelectorModal.vue:多字段搜索仍能显示列、分页、选择记录。
  • AiFormItem.vue:动态过滤参数从表单数据解析后提交。
  • ChildTableEditor.vue:子表选择器能读取父表单数据,批量追加不破坏 merge。
  • 详情数量区块:加载中、错误、空数据、正常数据四种状态可渲染。

4. 执行命令

后端编译:

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-plugin-parent/forge-plugin-generator -am compile -DskipTests

后端定向单测:

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-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest,BusinessRecordSelectorServiceTest,BusinessQuantityQueryServiceTest -Dsurefire.failIfNoSpecifiedTests=false test

本轮实际执行的无 Mockito 组合单测:

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-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest,BusinessRecordSelectorSearchParamsTest,BusinessQuantityQueryServiceTest -Dsurefire.failIfNoSpecifiedTests=false test

详情数量区块发布运行态补充单测:

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-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest,BusinessRecordSelectorSearchParamsTest,BusinessQuantityQueryServiceTest,LowcodeRuntimeConfigBuilderTest -Dsurefire.failIfNoSpecifiedTests=false test

前端构建:

source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build

静态检查:

git diff --check
rg -n '\$\{[^}]+\}' forge-server/db/migration

5. 不测试项

  • 不启动真实采购仓储业务应用联调,除非本地 MySQL、Redis 和服务状态可用。
  • 不测试第三方 Webhook。
  • 不测试完整 Flowable 引擎内部行为,本轮只验证动作回调可按配置执行循环步骤。

6. 本轮验证记录

  • 2026-07-03:后端插件编译通过。
  • 2026-07-03:BusinessActionForeachStepExecutorTestBusinessRecordSelectorSearchParamsTestBusinessQuantityQueryServiceTest 组合执行通过,Tests run: 12, Failures: 0, Errors: 0, Skipped: 0
  • 2026-07-03:前端 pnpm --dir forge-admin-ui build 通过,存在既有 chunk/CSS 注释告警。
  • 2026-07-03:git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。
  • 2026-07-03:P1 前端配置入口和详情数量区块完成后复跑前端构建,通过,✓ built in 2m 17s
  • 2026-07-03:P1 后端关系选择器透传完成后复跑插件编译,通过,BUILD SUCCESS
  • 2026-07-03:P1 复跑三组组合单测,通过,Tests run: 12, Failures: 0, Errors: 0, Skipped: 0
  • 2026-07-03:P1 复跑 git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。
  • 2026-07-03:补齐详情数量区块发布运行态贯通后复跑前端构建,通过,✓ built in 2m 54s
  • 2026-07-03:补齐详情数量区块发布运行态贯通后复跑后端插件编译,通过,BUILD SUCCESS
  • 2026-07-03:补齐详情数量区块发布运行态贯通后复跑三组组合单测,通过,Tests run: 12, Failures: 0, Errors: 0, Skipped: 0
  • 2026-07-03:补齐详情数量区块发布运行态贯通后复跑 git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。
  • 2026-07-03:新增 LowcodeRuntimeConfigBuilderTest 覆盖 detail.quantityPanels -> options.detailPanels,单测通过,Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
  • 2026-07-03:扩展组合单测加入 LowcodeRuntimeConfigBuilderTest 后通过,Tests run: 13, Failures: 0, Errors: 0, Skipped: 0
  • 2026-07-03:修复采购仓储设计器保存、字典字段和选择器编码问题后,后端插件编译通过,BUILD SUCCESS
  • 2026-07-03:新增并复跑 BusinessFieldSchemaServiceTestBusinessRecordSelectorSearchParamsTestBusinessObjectDesignerPageSchemaTest,通过,Tests run: 10, Failures: 0, Errors: 0, Skipped: 0
  • 2026-07-03:前端 pnpm --dir forge-admin-ui build 通过,✓ built in 1m 28s
  • 2026-07-03:git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。
  • 2026-07-03:修复页面工具栏脏字段引用、input-number 控件校验、动作执行对象编码别名和 COMMAND 动作运行配置后,复跑 BusinessObjectDesignerPageSchemaTestBusinessActionExecutionServiceTestLowcodeRuntimeConfigBuilderTestBusinessRecordSelectorSearchParamsTest,通过,Tests run: 14, Failures: 0, Errors: 0, Skipped: 0
  • 2026-07-03:复跑后端插件级编译 forge-plugin-generator -am compile -DskipTests,通过,BUILD SUCCESS
  • 2026-07-03:新增 V1.0.97__harden_procurement_warehouse_page_action_selector_protocol.sql 后复跑 git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。
  • 2026-07-03:补齐设计器内部 input-number/inputnumber 组件默认映射后,复跑同组定向单测,通过,Tests run: 15, Failures: 0, Errors: 0, Skipped: 0;复跑后端插件级 -am compile 通过,BUILD SUCCESS
  • 2026-07-03:修复设计器重建字段时丢失字典、选择器、自动编号元数据,以及发布按钮重复、菜单停用同步、Delete 误清字段绑定和列表全局对齐后,前端构建通过,✓ built in 1m 46s
  • 2026-07-03:复跑 BusinessObjectDesignerPageSchemaTestBusinessActionExecutionServiceTestLowcodeRuntimeConfigBuilderTestBusinessRecordSelectorSearchParamsTest,通过,Tests run: 18, Failures: 0, Errors: 0, Skipped: 0
  • 2026-07-03:复跑 admin 聚合编译 forge-admin-server -am compile -DskipTests,通过,BUILD SUCCESS,总耗时 13.779 s
  • 2026-07-03:新增 V1.0.98__preserve_procurement_warehouse_designer_field_runtime_metadata.sql 后复跑 git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。
  • 2026-07-04:恢复对象设计器右上角发布入口,移除发布检查卡片内重复发布按钮,前端构建通过,✓ built in 2m 26s
  • 2026-07-04:修复表单设计常用校验归一化丢失、关系选择器结构化配置和运行态 recordSelector 兜底后,LowcodeRuntimeConfigBuilderTest 通过,Tests run: 4, Failures: 0, Errors: 0, Skipped: 0;前端构建通过,✓ built in 2m 35s;本轮相关文件 git diff --check 无输出。