假设我在groovy中指定了这样的合同:
org.springframework.cloud.contract.spec.Contract.make {
request {
method "GET"
url "/api/profiles"
headers {
header('Accept': 'application/json;charset=UTF-8')
header('Content-Type': 'application/json;charset=UTF-8')
}
}
response {
status 200
headers {
header('Content-Type': 'application/json;charset=UTF-8')
}
body(
value(
stub(
'''\
[
{
"profile": "profile1",
"myMap": {}
},
{
"profile": "profile2",
"myMap": {
"12345": "FOO",
"asdf": "BAR"
}
}
]
'''
),
test(
[
[
"profile" : regex(nonEmpty()),
"myMap": [
[
??
]
]
]
]
)
)
)
}
}
现在我想测试一下,map包含String to String条目,其值不能为空。地图本身可能是空的。
如何测试动态密钥名称?
答案 0 :(得分:1)
在合同的响应方面,您必须选择是否使用地图表示法或字符串表示法。如果你想对响应的部分做断言,你必须将这些断言嵌入到体内或使用测试匹配器。
您可以将正文作为多行字符串放置,然后编写testMatchers
部分
testMatchers{
jsonPath('$.[*].myMap', byCommand('assertKeys($it)'))
}
那么它足以让您在assertKeys
方法中提供断言。