Как создать те же правила соответствия для "arrayMinLike", используя лямбда-Dsl для Pact?
У меня есть образец тела, как показано ниже;
[
"01/01/2019",
"01/02/2019",
"01/03/2019"
]
Я хотел бы проверить следующее: 1. Ответ должен быть массивом по крайней мере с 1 элементом2. Каждый элемент должен быть: 2.1. Строка 2.2. Должен быть в этом формате "ДД / ММ / ГГГГ"
Отлично работает со "старым" стилем:
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"
}
}
}
Однако, когда я пытаюсь использовать "новый" стиль, который является лямбда-Dsl для Pact (Java8), он не генерирует одинаковые правила соответствия; следовательно, не работает так же, и мой провайдерский тест всегда терпит неудачу с сообщением об ошибке ниже
$ -> Ожидается список с 1 элементом, но получено 3 элемента
Ниже приведен код и соответствующие правила, которые генерирует мой код. Обратите внимание на $[0]
а также $[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)
в разных местах, но ни одно из них не работает. Есть ли способ создать такие же правила сопоставления, используя лямбда-Dsl для Pact?
0 ответов
Я столкнулся с той же проблемой. См. Проблему и решение здесь
например:-
final DslPart actualPactDsl = LambdaDsl.newJsonBody((bodyDsl) -> {
bodyDsl
.stringType("id", "1")
.stringType("name","Dep 1")
.minArrayLike("students",1,(stud) ->{
stud
.stringType("id","1")
.stringType("firstName","John")
.stringType("lastName","Smith")
.numberType("age",21);
});
}).build();