Aserción profunda en la matriz JOSN con contiene en 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 se ve en el ejemplo, no me preocupa la "edad". Entiendo que puedo usar '#ignore'. ¿Hay alguna otra forma, si tengo muchos de estos nodos que tengo que ignorar?

Solo estoy pensando, ¿puede funcionar con matrices JSON como lo hace con objetos JSON? afirmando solo nodos especificados.

error:

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:

Probé algo sugerido en Karate: ¿cómo verificar si la matriz contiene valores? pero eso no me ayudó. No estoy buscando una validación de esquema, sino una validación funcional donde cada objeto puede tener diferentes valores para las claves.

Abajo uno falla

  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 bien, pero esto no me ayuda.

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

Actualmente, estoy leyendo matrices por separado y afirmándolas con loop.

Respuestas

1 PeterThomas Aug 18 2020 at 22:16

Simplemente agregando la palabra deepfunciona en 0.9.6.RC4

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

No entiendo por qué la respuesta vinculada cuando cerré su primera pregunta no le ayudó. Quizás no lo entiendo y alguien más pueda dar una mejor respuesta.