การยืนยันอย่างละเอียดเกี่ยวกับอาร์เรย์ 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 Objects หรือไม่ ยืนยันเฉพาะโหนดที่ระบุ

ข้อผิดพลาด:

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

ฉันไม่เข้าใจว่าทำไมคำตอบที่เชื่อมโยงเมื่อฉันปิดคำถามแรกของคุณไม่ได้ช่วยคุณ บางทีฉันอาจไม่เข้าใจและมีคนอื่นให้คำตอบที่ดีกว่าได้