Karate'de içerir JOSN dizisi üzerinde derin iddia

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

Örnekte görüldüğü gibi, 'yaş' konusunda endişelenmiyorum. '#İgnore' kullanabileceğimi anlıyorum. Başka bir yol var mı, eğer görmezden gelmem gereken çok sayıda düğüm varsa.

Sadece düşünüyorum, JSON Nesnelerinde olduğu gibi JSON dizileriyle çalışabilir mi? yalnızca belirli düğümleri öne sürerek.

hata:

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

DÜZENLE:

Karate'de önerilen bir şeyi denedim - dizinin değerler içerip içermediğini nasıl kontrol edebilirim? ama bu bana yardımcı olmadı. Şema doğrulamasını aramıyorum bunun yerine her nesnenin anahtarlar için farklı değerlere sahip olabileceği işlevsel doğrulama arıyorum.

Birinin altında başarısız

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

Bu iyi çalışıyor ama bu bana yardımcı olmuyor.

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

Şu anda, bir diziyi ayrı ayrı okuyorum ve onları döngü ile savunuyorum.

Yanıtlar

1 PeterThomas Aug 18 2020 at 22:16

Sadece kelimeyi eklemek deep0.9.6.RC4'te çalışır

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

İlk sorunuzu kapattığımda bağlantılı cevabın neden size yardımcı olmadığını anlamıyorum. Belki anlamıyorum ve başka biri daha iyi bir cevap verebilir.