我需要帮助来使用 pact-jvm ( https://github.com/DiUS/pact-jvm ) 编写我的消费者契约。
我的问题是我有一个字段是地图列表(数组)。每个地图可以有不同类型的元素(字符串或子地图),例如。
"validatedAnswers": [
{
"type": "typeA",
"answers": {
"favourite_colour": "Blue",
"correspondence_address": {
"line_1": "Main St",
"postcode": "1A 2BC",
"town": "London"
}
}
},
{
"type": "typeB",
"answers": {
"first_name": "Firstname",
"last_name": "Lastname",
}
}
]
但我们只对其中一些答案感兴趣。
注意:以上只是显示validatedAnswers
. 每张answers
地图都有几十个元素。
我们真正需要的是:https ://github.com/pact-foundation/pact-specification/issues/38 ,但它计划用于 v.4。与此同时,我们正在尝试不同的方法。我现在尝试做的是指定列表的每个元素都是非空映射。另一种方法是指定列表的每个元素都不为空。这些都可以使用 Groovy DSL 完成吗?
这个:
new PactBuilder().serviceConsumer('A').hasPactWith('B')
.port(findAvailablePort()).uponReceiving(...)
.willRespondWith(status: 200, headers: ['Content-Type': 'application/json'])
.withBody {
validatedAnswers minLike(1) {
type string()
answers {
}
}
}
不起作用,因为它意味着answers
预期为空(“预期为空地图但收到地图([...])”,另请参见https://github.com/DiUS/pact-jvm/issues/298) .
所以我想做的是这样的:
.withBody {
validatedAnswers minLike(1) {
type string()
answers Matchers.map()
}
}
或者:
validatedAnswers minLike(1) {
type string()
answers {
keyLike 'title', notNull()
}
}
或者:
validatedAnswers minLike(1) {
type string()
answers notNull()
}
可以做到吗?