Как создать те же правила соответствия для "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();
Другие вопросы по тегам