首页 > 解决方案 > 在 json 路径断言中使用查询字符串参数定义合约

问题描述

在重建生产者端之前,我正在尝试使用 SCC 编写一些合同(没有现有的测试!)。文档中有关列表和更深层次数据结构的示例有点薄,所以我想了解这是否可行,或者我可能不得不调用命令来做出正确的断言。我正在使用最新版本 v2.11

所以 -

Given:将在其有效负载中返回对象列表的 API。列表的长度将取决于客户端的身份,即客户端 A 将获得 3 个项目,客户端 B 将获得 4 个项目。客户的身份在这里并不重要。

何时:客户端发出 GET 请求,传递查询字符串参数以在项目列表中选择项目

然后:我想编写一个从请求中获取输入并证明响应包含对象列表的合同,并且与选择器匹配的项目有一个布尔字段选择:true,而其余项目已选择:false。选择器错误并且没有选择任何项目的边缘。

例如对于请求 GET /someapi?id=bbb

回复

{ foo: xxxy, bar: 123, baz: [
  { id: 'aaa', selected: false, .... },
  { id: 'bbb', selected: true, .... },
  { id: 'ccc', selected: false, .... }
] }

当然,所选项目可以在列表中的任何位置。所以我想到了一个像这个伪代码这样的断言 -

jsonPath('$.baz[?(@.id ==  fromRequest().query("id"))].selected', byEquality( true ) )

但我不能在 JSONPath 语句中执行 fromRequest() 的内容。现在我想我可以简单地将整个响应体作为规范,但这似乎很笨拙。如果必须是,那我想也很好。

任何想法或帮助表示赞赏。

标签: spring-cloud-contract

解决方案


推荐阅读