Как сделать проверку схемы JSON для объектов, содержащих другие объекты, используя файл чтения в каратэ - PullRequest
1 голос
/ 10 октября 2019

Я хотел бы проверить схему json для ответа json с объектами, содержащими другие объекты. Пример ответа json на запрос GET / person / id, который отправит объект person:

{
"id":"789",
"name":"Jane",
"children":[
{
"id":"111",
"name":"Bill",
"hobbies":[
"chess",
"knitting"
],
"schools":[
{
"id":"111A",
"name":"LA public"
},
{
"id":"111B",
"name":"NY public"
}
]
}
]
}

Запрос GET / Person отправит массив, содержащий объекты person.

Пример функции для проверки(Validator.feature):

Feature: json schema validation
   Scenario: 
   * def schoolSchema =
     """
      {
        id: '#string',
        name: '#string'
      }
    """

    * def childrenSchema =
     """
      {
        id: '#string',
        name: '#string',
        hobbies: '#regex \d (playing|singing|knitting|chess)',
        schools: '##[] schoolSchema'
      }
    """

    * def personSchema =
    """
      {
        id: '#string',
        name: '#string',
        children: '#[] childrenSchema'
      }
    """

Я не хочу ставить в конце этой функции * match each response == personSchema или * match response == personSchema

Я хотел бы вызвать функцию проверки схемыиз моей основной функции, как это:

Given url url
And path 'persons'
When method get
Then status 200
And match each response == call read('Validator.schema')
Given url url
And path 'persons', id
When method get
Then status 200
And match response == call read('Validator.schema')

для проверки ответов на оба запроса. Мне нужно поместить эту схему в объект или в файл json, чтобы иметь только одно место для изменения схемы json. Как я мог это сделать?

1 Ответ

2 голосов
/ 11 октября 2019

Вы упомянули, что не хотите использовать * match response == personSchema

Вы пробовали вот так,

* call read('Validator.feature')
And match response == personSchema
...