Я пытаюсь проверить ответ 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", и я хочу быть уверенным, что все эти ключи присутствуют там, когда он не пуст, я не могу проверить это с помощью этого подхода, потому что для каждого человека ключ: значение, этот подход предполагает, что они могут либо присутствовать, либо нет, и будут соответствовать схеме, даже если некоторые из этих ключей будут присутствовать.
Вау, я должен признать, что никогда не сталкивался с этим делом, и это о чем-то говорит. Наконец-то я смог найти возможное решение:
* 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