Как проверить объект внутри схемы JSON в каратэ, является ли он пустым или содержит ряд пар ключ: значение?

Я пытаюсь проверить ответ API с помощью каратэ для любого из этих двух состояний. Сценарий 1 (когда он возвращает объект contractData, содержащий ключ комиссии):

{
    "customer": {
        "financialData": {
            "totalAmount": 55736.51,
            "CreateDate": "2022-04-01",
            "RequestedBy": "[email protected]"
        },
        "contractData": {
            "Fee": 78.00
        }
    }
}

Сценарий 2 (когда он возвращает пустой объект contractData):

{
    "customer": {
        "financialData": {
            "totalAmount": 55736.51,
            "CreateDate": "2022-04-01",
            "RequestedBy": "[email protected]"
        },
        "contractData": {}
    }
}

Как я могу написать свою логику проверки схемы для проверки обоих состояний? Лучшее, что я мог сделать, это написать так:

* def schema = {"customer":{"financialData":{"totalAmount":"#number","CreateDate":"#?isValidDate(_)","RequestedBy":"#string"},"contractData":{"Fee": ##number}}}
* match response == schema

И похоже, что это работает для обоих вышеперечисленных сценариев, но я не уверен, лучший ли это подход или нет. Проблема с этим подходом заключается в том, что если у меня есть более одной пары ключ: значение внутри объекта "contractData", и я хочу быть уверенным, что все эти ключи присутствуют там, когда он не пуст, я не могу проверить это с помощью этого подхода, потому что для каждого человека ключ: значение, этот подход предполагает, что они могут либо присутствовать, либо нет, и будут соответствовать схеме, даже если некоторые из этих ключей будут присутствовать.

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как создать простое погодное приложение на Python с API OpenWeatherMap
Как создать простое погодное приложение на Python с API OpenWeatherMap
Этот учебник проведет вас через процесс создания простого погодного приложения с помощью Python и OpenWeatherMap API.
Пакеты Java
Пакеты Java
Пакет java - это группа классов, интерфейсов и подпакетов схожего типа. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы...
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
В этом руководстве вы узнаете, как использовать API парсинга квитанций за 5 минут с помощью JavaScript. Eden AI предоставляет простой и удобный для...
1
0
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вау, я должен признать, что никогда не сталкивался с этим делом, и это о чем-то говорит. Наконец-то я смог найти возможное решение:

* def chunk = { foo: 'bar' }
* def valid = function(x){ return karate.match(x, {}).pass || karate.match(x, chunk).pass }
* def schema = { hey: '#? valid(_)' }
* def response1 = { hey: { foo: 'bar' } }
* def response2 = { hey: { } }
* match response1 == schema
* match response2 == schema

Другие вопросы по теме