Каратэ - проверка ответов json, хранящихся в разных файлах.

Мне нужно проверить 2 ответа json, которые хранятся в двух разных файлах. Я их читаю и сравниваю. Но я получаю сообщение об ошибке reason: all key-values did not match, и несколько элементов не совпадают. Эта проблема возникает только тогда, когда я сохраняю json в файле и читаю свой файл функций.

Файл Json 1: Test.json

{
   "webServiceDetail":{
      "feature":{
         "featureCd":"ABCD",
         "imaginaryInd":"100.0",
         "extraInd1":"someRandomValue1"
      },
      "includefeatureList":[
         {
            "featureCd":"PQRS",
            "featureName":"Checking SecondAddOn Service",
            "extraInd1":"someRandomValue1",
            "extraInd2":"someRandomValue1"
         },
         {
            "featureCd":"XYZ",
            "featureName":"Checking AddOn Service",
            "imaginaryInd":"50.0"
         }
      ]
   }
}

Файл Json 2: Test1.json

{
   "webServiceSummary":{
      "service":{
         "serviceCd":"ABCD"
      },
      "includeServicesList":[
         {
            "serviceCd":"XYZ",
            "serviceDescription": "Checking AddOn Service"
         },
         {
            "serviceCd":"PQRS",
            "serviceDescription":"Checking SecondAddOn Service"
         }
      ]
   }
}

Теперь я использую приведенный ниже код для сопоставления двух файлов json.

* def Test = read('classpath:PP1/data/Test.json')
* def Test1 = read('classpath:PP1/data/Test1.json')

* def feature = Test.webServiceDetail.feature
* set expected.webServiceSummary.service
| path               | value                |
| serviceCd          | feature.featureCd    |

* def mapper = function(x){ return { serviceCd: x.featureCd, serviceDescription: x.featureName} }
* def expectedList = karate.map(Test.webServiceDetail.includefeatureList, mapper)
* set expected.webServiceSummary.includeServicesList = expectedList
* print expected
* print Test1
* match Test1 == expected

Ниже приведен ответ об ошибке.

com.intuit.karate.exception.KarateException: Test.feature:35 - path: $, actual: {webServiceSummary={service={serviceCd=ABCD}, includeServicesList=[{"serviceCd":"XYZ","serviceDescription":"Checking AddOn Service"},{"serviceCd":"PQRS","serviceDescription":"Checking SecondAddOn Service"}]}}, expected: {webServiceSummary={service={serviceCd=ABCD}, includeServicesList=[[object Object], [object Object]]}}, reason: all key-values did not match


person sandeep hegde    schedule 22.12.2018    source источник
comment
Если я сохраню эти 2 файла json в одном файле функций, все будет работать нормально. Проблема возникает только тогда, когда я читаю из разных файлов.   -  person sandeep hegde    schedule 22.12.2018


Ответы (1)


Вы близки, но порядок includeServicesList не совпадает. Сделайте одно изменение:

* set expected.webServiceSummary.includeServicesList = '#(^^expectedList)'
person Peter Thomas    schedule 22.12.2018
comment
Спасибо, Питер, это работает. Но в некоторых случаях, даже если порядок совпадает, я получаю эту ошибку [object Object] при попытке сопоставления, а '# (^^ expectedList)' не сработал (т.е. в некоторых сложных элементах). Не могли бы вы помочь мне с логика использования '# (^^ expectedList)'? Я также не смог найти это в github. - person sandeep hegde; 22.12.2018
comment
Я хотел сказать, что в некоторых случаях мне нужно использовать ключевое слово contains. Например, * match Test1 содержит ожидаемый - здесь я снова вижу ошибку, говорящую, что ожидается: '# (^^ expectedList)', причина: фактическое значение не содержит ожидаемого. Я немного потерялся здесь! - person sandeep hegde; 22.12.2018
comment
@sandeephegde прочтите документы. не торопитесь. при необходимости откройте новый вопрос: github.com/intuit/karate#contains-short-cuts - person Peter Thomas; 23.12.2018