Affermazione profonda sull'array JOSN con contiene in 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' }]

Come visto nell'esempio, non sono preoccupato per l '"età". Capisco che posso usare "#ignore". C'è un altro modo, se ho molti di questi nodi che devo ignorare.

Sto solo pensando, può funzionare con gli array JSON come fa con gli oggetti JSON. affermando solo i nodi specificati.

errore:

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

MODIFICARE:

Ho provato qualcosa suggerito in Karate: come verificare se l'array contiene valori? ma questo non mi ha aiutato. Non sto cercando la convalida dello schema, invece sto cercando la convalida funzionale in cui ogni oggetto può avere valori diversi per le chiavi.

Di seguito uno fallisce

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

Questo funziona bene ma non mi sta aiutando.

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

Attualmente, sto leggendo gli array separatamente e li asserisco con loop.

Risposte

1 PeterThomas Aug 18 2020 at 22:16

La semplice aggiunta della parola deepfunziona in 0.9.6.RC4

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

Non capisco perché la risposta collegata quando ho chiuso la tua prima domanda non ti sia stata d'aiuto. Forse non capisco e qualcun altro può fornire una risposta migliore.