我有这份合同
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属性。