test-spec.md 6.4 KB

测试 Spec — 前端字典来源与设计器枚举整改

status: apply created: 2026-07-27

0. 测试原则

  • 复用当前前端 Vitest/Vite 基线,只做本轮增量验证。
  • 先验证纯函数 Red,再实现 Green;页面改造以构建、Lint 和静态合同为主。
  • 不把未执行的真实 Flyway 或浏览器 E2E 记为通过。
  • 所有命令、结果、警告和跳过项写入 execution-log.md

1. P0 覆盖

场景 输入 预期
数字字典转换 value='1'/'0' 输出 1/0,保留标签和样式元数据
布尔字典转换 value='1'/'0'true/false 输出严格布尔值
协议值映射 MYSQL 等字典值 输出生成器当前兼容值,未知值按原值保留
空字典 null/undefined/[] 返回空数组,不抛异常
异步 Schema 字典挂载后更新 computed options 随 dict.value 更新

2. P1 静态合同

  • V1.0.54 在本阶段尚未部署,可在首次 Flyway 执行前补齐缺失 seed;一旦进入 forge_schema_history 则禁止继续修改。
  • sys_dict_type / sys_dict_data INSERT 使用显式列名。
  • 所有 seed 的 tenant_id=1,类型和值分别用 NOT EXISTS 防重复。
  • sys_req_method=PATCHflow_process_form_type=business 存在。
  • Data 脱敏正则在 SQL 中正确转义,静态预期值与前端读取值一致。
  • 目标 AiCrudPage Schema 依赖字典时均为 computed。
  • 目标页面不再声明已迁移的运行时业务 options 数组。
  • 三处标签类型统一从 constants 导入。

3. P1 构建与测试

  • pnpm vitest run src/utils/__tests__/dict-options.spec.js
  • 对目标文件运行 ESLint,不执行全仓自动修复。
  • pnpm build
  • git diff --check、SDD 尾随空白和 EOF 检查。

4. P2 部署验证

  • 在隔离 MySQL 8 执行 Flyway,确认 forge_schema_history1.0.54 成功。
  • 查询新增字典类型/数据数量并抽查 dict_value
  • 清空浏览器缓存,验证目标下拉首次加载、编辑回显、搜索和保存。
  • 验证数字/布尔字段请求体类型、生成器数据库类型兼容值、流程 business 表单和触发器 JSON 值。

5. 历史验证基线

时间 范围 结果 备注
2026-07-27 当前前端测试框架盘点 Vitest 2.1.9,已有多模块组件/工具测试 未在 Proposal 阶段运行全量测试

6. 本轮增量验证

时间 变更范围 实际命令 结果 跳过/警告
2026-07-27 字典转换工具 pnpm vitest run src/utils/__tests__/dict-options.spec.js Review 修复后 5/5 passed 新增字典未加载时保留持久化值合同
2026-07-27 22 个目标 JS/Vue 文件 pnpm exec eslint <目标文件> exit 0,零问题 未对全仓执行自动修复
2026-07-27 Flyway 与硬编码合同 版本、placeholder、NOT EXISTS、租户、关键值、正则和目标 options rg 扫描 passed 剩余 options 为动态数据源、顶级资源占位及 dictData 页面本地控件
2026-07-27 前端生产构建 NODE_OPTIONS=--max-old-space-size=8192 pnpm build passed 存在既有组件命名、CSS 注释和 chunk 警告,不阻断构建
2026-07-27 第三轮 Review 修复 Vitest、22 个目标文件 ESLint、生产构建 passed:5/5、ESLint exit 0、8727 modules 入口模式/应用模式不再使用硬编码业务选项 fallback;既有构建警告不阻断
2026-07-27 第四轮 Review 修复 Vitest、22 个目标文件 ESLint、Flyway seed/placeholder 静态检查、生产构建 passed:6/6、ESLint exit 0、placeholder 无输出、8727 modules 补齐应用模式字典及五处状态回显;既有构建警告不阻断
2026-07-27 第五轮 Review 修复 Vitest、dataset.vue/测试 ESLint、生产构建 passed:9/9、ESLint exit 0、8727 modules 覆盖数字发布状态、无硬编码 fallback、分类状态字典和详情 hydration;既有构建警告不阻断
2026-07-27 第六轮 Review 修复 Vitest、dataset.vue/测试 ESLint、生产构建 passed:10/10、ESLint exit 0、8727 modules 列表类型标签消费 data_dataset_type 字典元数据;既有构建警告不阻断
2026-07-27 Code Quality 最终修复 pnpm vitest run src/utils/__tests__/dict-options.spec.js;Flyway/SDD/格式静态检查 passed:11/11;静态检查通过 补齐 ai_business_app_entry_mode 及六个协议值;按用户要求不重跑 build/E2E
待部署 P2 真实环境 MySQL/Flyway、字典 API、浏览器加载/回显/保存 not run 部署门禁,不计为通过

7. 执行证据

  • 自动化和静态检查:execution-log.md
  • 数据迁移:本地仅静态检查,真实结果待部署环境。
  • 服务启动与停止:本阶段默认不启动后端服务;如启动前端预览,必须记录端口和停止状态。

8. 第四轮 Spec Review 增量合同

  • V1.0.54 必须同时声明 ai_business_app_mode 类型及 DYNAMIC_RENDERCODE_DOWNLOAD 两个值,且保持 tenant_id=1NOT EXISTS
  • system/menu.vueapp-center/trigger.vuedata/dataset.vueexternal/manage.vuesystem/config-center.vue 的目标业务状态回显必须消费字典元数据。
  • Vitest 必须证明依赖异步字典的 computed options 在字典到达后从空数组更新为转换后的值。

9. 第五轮 Spec Review 增量合同

  • data_dataset_publish_status 搜索选项必须通过 toNumberDictOptions 保持后端 Integer 协议。
  • 发布状态、访问模式和数据集类型未知值不得伪装成默认业务标签;分类停用标签必须消费 sys_enable_disable
  • beforeRenderDetail 必须先等待 ensureRowScopeDictOptions(),再调用 prepareDatasetFormData 组装旧字段格式的 ruleItems

10. 第六轮 Spec Review 增量合同

  • 数据集列表类型标签必须使用 DictTag,并传入 datasetTypeOptions.valuerow.datasetType
  • tableColumns 区段不得恢复按 TABLE 硬编码“单表/SQL”标签和样式的三元表达式。

11. Code Quality 最终增量合同

  • V1.0.54 必须声明 ai_business_app_entry_mode 类型。
  • 该类型必须完整种入 RUNTIMEROUTEIFRAMEEXTERNALH5API 六个现存协议值。
  • Vitest 直接检查迁移源码,防止后续删除类型或任一协议值。