Глубокое утверждение о массиве JOSN, содержащееся в каратэ

Aug 19 2020
 Scenario: 
    Given def cat =
      """
      {
        name: 'Billie',
        kittens: [
          { id: 23, name: 'Bob', age: 35 },
          { id: 42, name: 'Wild', age: 25 }
        ]
      }
      """
    Then match cat.kittens contains [{ id: 42, name: 'Wild' }, { id: 23, name: 'Bob' }]

Как видно из примера, меня не беспокоит «возраст». Я понимаю, что могу использовать #ignore. Есть ли другой способ, если у меня много таких узлов, которые я должен игнорировать.

Я просто думаю, может ли он работать с массивами JSON, как с объектами JSON. утверждение только указанных узлов.

ошибка:

assert.feature:24 - path: $.kittens[*], actual: [{"id":23,"name":"Bob","age":35},{"id":42,"name":"Wild","age":25}], expected: {id=42, name=Wild}, reason: actual value does not contain expected

РЕДАКТИРОВАТЬ:

Я попробовал кое-что из предложенного в карате - как проверить, содержит ли массив значения? но это мне не помогло. Я не ищу проверки схемы, вместо этого я ищу функциональную проверку, при которой каждый объект может иметь разные значения ключей.

Ниже одного не удается

  Scenario: 
    Given def cat =
      """
      {
        name: 'Billie',
        kittens: [
          { id: 23, name: 'Bob', age: 35 },
          { id: 42, name: 'Wild', age: 25 }
        ]
      }
      """
      * def expected = [{ id: 42, name: 'Wild' }, { id: 23, name: 'Bob' }]
    Then match cat.kittens contains '#(^expected)'

Этот работает нормально, но мне это не помогает.

  Scenario: 
    Given def cat =
      """
      {
        name: 'Billie',
        kittens: [
          { id: 23, name: 'Bob', age: 35 },
          { id: 42, name: 'Wild', age: 25 }
        ]
      }
      """
      * def expected = { id: 42, name: 'Wild' }
    Then match cat.kittens contains '#(^expected)'

В настоящее время я читаю массивы отдельно и утверждаю их с помощью цикла.

Ответы

1 PeterThomas Aug 18 2020 at 22:16

Просто добавление слова deepработает в 0.9.6.RC4

Then match cat.kittens contains deep [{ id: 42, name: 'Wild' }, { id: 23, name: 'Bob' }]

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