Как проверить, что поле существует в каждом элементе массива и не пусто

Предположим, у меня есть такой контракт:

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",
                      },
                      {
                        "profile": "profile2",
                      }
                    ]   
                    '''
                    ),
                    test(
                            [
                                    [
                                            "profile" : regex(nonEmpty()),
                                    ]
                            ]
                    )
            )
    )
}

Тест "profile" : regex(nonEmpty()) проверяет только наличие хотя бы одной записи массива с непустым атрибутом profile.

Я хотел бы проверить, что все записи имеют непустой profile.

Я уже пробовал это с помощью тестовых сопоставителей:

jsonPath('$.[*].profile', byRegex(nonEmpty()))

Хотя это проверяет каждое поле profile на непустое, оно не проверяет, существует ли такое поле на самом деле.

Как я могу проверить, что поле profile существует в каждой записи массива и что каждое из них не пусто?


person Johannes Dorn    schedule 30.11.2017    source источник


Ответы (1)


Думаю, проще всего будет использовать byCommand в разделе testMatchers и передать туда список. Затем вручную утвердите все, что вы хотите программно.

person Marcin Grzejszczak    schedule 28.12.2017
comment
Спасибо. Просто чтобы уточнить, ранее существовавшие сопоставители предназначены только для проверки отдельных записей? - person Johannes Dorn; 08.01.2018
comment
Я думаю, что очень подробно описал это здесь (cloud.spring.io/spring-cloud-static/Edgware.RELEASE/single/). Он будет утверждать все, что вы передаете как путь json. Список, одиночная запись, карта и т. д. - person Marcin Grzejszczak; 08.01.2018
comment
Извините, но я не могу найти там разъяснения. Во всяком случае, теперь я еще больше запутался. Я ожидал, что смогу утвердить каждый объект в массиве. Ваш первоначальный ответ указывает, что это возможно только программным путем. Это правда? - person Johannes Dorn; 08.01.2018
comment
Если вы не можете написать их с помощью утверждения пути json, вам нужно сделать это программно. - person Marcin Grzejszczak; 08.01.2018