我有一个样本主体如下;
[
"01/01/2019",
"01/02/2019",
"01/03/2019"
]
我想验证以下内容: 1. 响应应该是一个至少包含 1 个元素的数组 2. 每个元素应该是:2.1。字符串 2.2。应该是这种格式“DD/MM/YYYY”
它与“旧”风格完美搭配:
DslPart body = PactDslJsonArray.arrayMinLike(1, 2, PactDslJsonRootValue.stringMatcher(Constants.DATETIMEPATTERN, "01/01/2019"));
这将生成具有匹配规则的协议文件,如下所示。注意$
和$[*]
...
"matchingRules": {
"body": {
"$": {
"matchers": [
{
"match": "type",
"min": 1
}
],
"combine": "AND"
},
"$[*]": {
"matchers": [
{
"match": "regex",
"regex": "^(([0-3]?\\d+)\\/((0?[1-9])|(1[0-2]))\\/20\\d{2})$"
}
],
"combine": "AND"
}
}
}
但是,当我尝试使用“新”样式,即lambda Dsl for Pact (Java8)时,它不会生成相同的匹配规则;因此不能以相同的方式工作,并且我的提供程序测试总是失败并显示以下错误消息
$ -> 期望一个包含 1 个元素但收到 3 个元素的列表
下面是我的代码生成的代码和匹配规则。注意$[0]
and $[1]
: 匹配规则
...
"matchingRules": {
"body": {
"$[0]": {
"matchers": [
{
"match": "regex",
"regex": "^(([0-3]?\\d+)\\/((0?[1-9])|(1[0-2]))\\/20\\d{2})$"
}
],
"combine": "AND"
},
"$[1]": {
"matchers": [
{
"match": "type",
"min": 1
}
],
"combine": "AND"
}
}
}
和代码
DslPart body = newJsonArray((array) -> {
array
.stringMatcher(Constants.DATETIMEPATTERN, "01/01/2019");
}).minArrayLike(1).build();
尝试了另一种方式
DslPart body = newJsonArray((array) -> {
array
.stringMatcher(Constants.DATETIMEPATTERN, "01/01/2019")
.minArrayLike(1);
}).build();
我一直在尝试将它们.minArrayLike(1)
放在不同的地方,但它们都不起作用。无论如何使用 lambda Dsl for Pact 产生相同的匹配规则吗?