Afirmação profunda sobre a matriz JOSN com contém em Karate

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' }]

Como visto no exemplo, não estou preocupado com a 'idade'. Eu entendo que posso usar '#ignore'. Existe alguma outra maneira, se eu tiver muitos desses nós que devo ignorar.

Estou apenas pensando, isso pode funcionar com matrizes JSON como funciona com objetos JSON. afirmando apenas nós especificados.

erro:

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

EDITAR:

Tentei algo sugerido em Karate - como verificar se array contém valores? mas isso não me ajudou. Não estou procurando validação de esquema, em vez disso, estou procurando validação funcional em que cada objeto pode ter valores diferentes para chaves.

Abaixo um falha

  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)'

Este funciona bem, mas não está me ajudando.

  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)'

Atualmente, estou lendo arrays separadamente e afirmando-os com loop.

Respostas

1 PeterThomas Aug 18 2020 at 22:16

Apenas adicionar a palavra deepfunciona no 0.9.6.RC4

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

Não entendo por que a resposta vinculada quando fechei sua primeira pergunta não ajudou você. Talvez eu não entenda e outra pessoa possa dar uma resposta melhor.