1
0
Files
DiAL/openspec/changes/archive/2026-05-10-enhance-expect-rules/tasks.md

2.8 KiB
Raw Blame History

1. 依赖安装

  • 1.1 安装 cheerio、xpath、@xmldom/xmldom 依赖

2. 类型定义

  • 2.1 在 types.ts 中定义 ExpectOperator、BodyExpectConfig 接口
  • 2.2 更新 ExpectConfig 接口,新增 headers 字段,将 bodyContains 替换为 body 分组
  • 2.3 新增 CssExpect 类型ExpectValue | ExpectOperator & { attr?: string }
  • 2.4 导出 ExpectValue 联合类型

3. Body 校验核心实现

  • 3.1 实现简易 JSONPath 求值函数 evaluateJsonPath支持 .a.b、.a[0].b 等基本路径)
  • 3.2 实现操作符比较函数 applyOperatorequals/contains/match/empty/exists/gte/lte/gt/lt
  • 3.3 实现 checkExpectValue 函数:标量 → equals对象 → 遍历操作符
  • 3.4 实现 checkBodyContainsbody.includes 包装
  • 3.5 实现 checkBodyRegexnew RegExp().test 包装
  • 3.6 实现 checkBodyJsonJSON.parse + evaluateJsonPath + applyOperator
  • 3.7 实现 checkBodyCsscheerio.load + 选择器查询 + text/attr 提取 + applyOperator
  • 3.8 实现 checkBodyXpathxmldom 解析 + xpath 引擎 evaluate + applyOperator

4. Expect 校验重构

  • 4.1 重构 checkExpect 函数,新增 headers 检查逻辑
  • 4.2 将 bodyContains 检查替换为 checkBodyExpect 调用,按需分发到五种子方法
  • 4.3 实现 checkBodyExpect 主入口:按 contains → regex → json → css → xpath 顺序 AND 短路执行

5. 配置加载

  • 5.1 确认 config-loader 中 expect 透传逻辑对新结构的兼容性,更新类型引用

6. 数据存储兼容

  • 6.1 验证 store.ts 中 expect JSON 序列化对新结构的兼容性,必要时调整

7. 测试

  • 7.1 为 evaluateJsonPath 编写单元测试(嵌套对象、数组索引、不存在路径、边界情况)
  • 7.2 为 applyOperator 编写单元测试9 种操作符各至少 2 个 case
  • 7.3 为 checkBodyContains/checkBodyRegex 编写单元测试
  • 7.4 为 checkBodyJson 编写单元测试等值匹配、操作符匹配、JSON 解析失败、路径不存在)
  • 7.5 为 checkBodyCss 编写单元测试text 提取、attr 提取、无匹配元素)
  • 7.6 为 checkBodyXpath 编写单元测试节点文本、属性值、无匹配节点、XML 解析失败)
  • 7.7 为 checkExpect 新增测试用例headers 校验、body 多种方法 AND 组合、全量规则)
  • 7.8 更新 config-loader 测试用例(新 expect 格式解析、向后兼容验证)
  • 7.9 端到端模拟测试:构造完整 expect 配置并验证 checkExpect 整体行为

8. 文档与示例

  • 8.1 更新 probes.example.yaml展示 headers 和 body 分组全部用法示例
  • 8.2 更新 README.md 配置说明章节,补充 expect.body 和 headers 的文档
  • 8.3 更新 README.md 依赖列表(如有需要)