Есть ли способ проверить ответ содержится в схеме? - PullRequest
2 голосов
/ 18 мая 2019

В карате я хотел бы иметь переменную схемы, которая является расширенным набором данных ответов, чтобы я мог тестировать несколько запросов с одной и той же схемой.

Это должно быть особенно полезно для GraphQL, гдесам запрос определяет возвращаемые поля.

Ожидаемая схема:

{
   id: '#notnull',
   name: '#notnull',
   description: '##string',
   nonNullStringField: '#string'
   ...
}
Given url ...
When request ...
Then match response.data <contained in> '#(mySchema)'

Response.data:

{
   id: 'someId',
   name: 'some name'
}

В этом случае все ключи возвращаютсяresponse.data должен быть в схеме, но любой ключ в схеме, не входящий в response.data, должен игнорироваться.

Есть ли способ сделать это в каратэ или какой-то план добавить эту функцию в будущем??

Редактировать: обновлен пример, поскольку пропущен единственный атрибут, который может иметь значение NULL.

1 Ответ

1 голос
/ 18 мая 2019

Я не уверен, что улучшение необходимо, потому что для этой цели был разработан дополнительный маркер ##foo, и это уже работает:

* def schema = { id: '#notnull', name: '#notnull', description: '##string' }
* def response = { id: 'someId', name: 'some name' }
* match response == schema

РЕДАКТИРОВАТЬ: но так как вы хотите ограничить свою схемус ключами в ответе «универсальным» способом вы можете сделать следующее:

* def expected = {}
* def fun = function(k, v){ expected.put(k, schema[k]) }
* eval karate.forEach(response, fun)
* match response == expected

Вы должны быть в состоянии легко создать повторно используемую утилиту JS или Java, которая достигает вышеуказанного.Несколько причин, по которым я не одобряю добавление другого ключевого слова синтаксиса / match, заключается в том, что у вложенного JSON могут быть интересные граничные случаи, которые усложняют ситуацию.И я не хочу усложнять match дальше.Как я уже говорил в комментариях, проверка схемы IMO - это последнее, что вам нужно проверить в GraphQL, это в значительной степени гарантировано.Это первый раз, когда кто-то просил об этом за 2 года, так что вот так.Вы можете рассмотреть возможность подачи PR, конечно:)

...