与具有嵌套数组的请求体进行契约



我有这份合同

org.springframework.cloud.contract.spec.Contract.make {
request {
method 'POST'
url ('/v1/foo') {
body([
fooList: [[
id: anyUuid()
]]
])
}
headers {
contentType applicationJson()
}
}
response {
status OK()
}
}

当我用Postman测试它时,它像预期的那样工作

{
"fooList": [
{ "id": "dd2b602a-5052-4203-9e8c-3f1dfb49b860" },
{ "id": "dd2b602a-5052-4203-9e8c-3f1dfb49b861" }
]
}

但是当我试图让它失败,只改变一个我喜欢咆哮它也工作!!

{
"fooList": [
{ "id": 1 },
{ "id": "dd2b602a-5052-4203-9e8c-3f1dfb49b861" }
]
}

当所有id都不正确时,它失败了!!

{
"fooList": [
{ "id": 1 },
{ "id": 1 }
]
}

这样的

Request was not matched
=======================
-----------------------------------------------------------------------------------------------------------------------
| Closest stub                                             | Request                                                  |
-----------------------------------------------------------------------------------------------------------------------
|
POST                                                       | POST
/v1/processOdr                                             | /v1/processOdr
|
Content-Type [matches] : application/json.*                | Content-Type: application/json
|
$.['fooList'][*][?(@.['id'] =~                             | {                                                   <<<<< Body does not match
/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]  |     "fooList": [
{12}/)]                                                    |         {
|             "id": 1
|         },
|         {
|             "id": 1
|         }
|     ]
| }
|
-----------------------------------------------------------------------------------------------------------------------

如何处理请求体中嵌套数组的情况?

生成的jsonpath将搜索与正则表达式匹配的任何元素。这意味着至少有一个。如果你需要它们全部匹配,你可以通过spring.cloud.contract. verify .assert.size属性来检查数组大小。下面你可以在文档中找到关于

的条目对验证JSON数组大小的支持是实验性的。如果你想打开它,将以下系统属性的值设置为true:缺省情况下,该特性设置为false。你也可以在插件配置中设置assertJsonSize属性。

相关内容

  • 没有找到相关文章

最新更新