Framework карате: #notnull и #present не работают, если ответ пуст - PullRequest
4 голосов
/ 27 июня 2019

Моя проверка состоит в том, чтобы убедиться, что orgId отображается в ответе или нет, и что orgId должен содержать некоторое значение

Ответ, который я получаю, - это Код состояния 200, а тело ответа пусто.

Теперь у меня есть реализация ниже

Then match $.orgId == '#present'
Then match $.orgId == '#notnull'

В этом случае код проходит, в идеале он должен потерпеть неудачу, так как тело ответа пустое, а orgId отсутствует в ответе.Мой вопрос: почему код передается с #present и #notnull, даже если тело ответа пусто

1 Ответ

5 голосов
/ 27 июня 2019

Вы определенно что-то упускаете. Попробуйте это в новом сценарии и посмотрите, как это работает. Ниже приведено жесткое кодирование response, что в точности соответствует тому, что происходит во время выполнения, и, кстати, это отличный способ проверить утверждения в отношении различных типов JSON (без каких-либо HTTP-вызовов):

* def response = {}
Then match $.orgId == '#present'
Then match $.orgId == '#notnull'

И это дает сбой, как вы ожидаете:

assertion failed: path: $.orgId, actual: null, expected: '#present', reason: actual json-path does not exist

Так что, если вы все еще застряли, выполните этот процесс, пожалуйста: https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

РЕДАКТИРОВАТЬ: если ваш ответ является пустой строкой, но вы ожидали JSON, просто сделайте это, и он не пройдет тест, см. Преобразование типа: https://github.com/intuit/karate#type-conversion

* json response = response

Но, как упоминалось в документации, вы всегда должны пытаться сопоставить «полный JSON», поэтому это должно работать:

* def response = ''
Then match $ contains { orgId: '#notnull' }

РЕДАКТИРОВАТЬ: это будет исправлено в 0.9.4 https://github.com/intuit/karate/issues/814

...