Penegasan mendalam pada array JOSN dengan isi dalam Karate
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' }]
Seperti yang terlihat pada contoh, saya tidak khawatir tentang 'usia'. Saya memahami bahwa saya dapat menggunakan '#ignore'. Apakah ada cara lain, Jika saya memiliki banyak node seperti itu yang harus saya abaikan.
Saya hanya berpikir, dapatkah itu bekerja dengan array JSON seperti halnya dengan Objek JSON. menegaskan hanya node tertentu.
kesalahan:
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
EDIT:
Saya mencoba sesuatu yang disarankan dalam Karate - bagaimana cara memeriksa apakah array berisi nilai? tapi itu tidak membantu saya. Saya tidak mencari validasi skema, tetapi saya mencari validasi fungsional di mana setiap objek mungkin memiliki nilai kunci yang berbeda.
Di bawah ini gagal
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)'
Yang ini berfungsi dengan baik tetapi ini tidak membantu saya.
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)'
Saat ini, saya membaca array secara terpisah dan menegaskannya dengan loop.
Jawaban
Hanya menambahkan kata deep
berfungsi di 0.9.6.RC4
Then match cat.kittens contains deep [{ id: 42, name: 'Wild' }, { id: 23, name: 'Bob' }]
Saya tidak mengerti mengapa jawaban yang ditautkan ketika saya menutup pertanyaan pertama Anda tidak membantu Anda. Mungkin saya tidak mengerti, dan orang lain bisa memberikan jawaban yang lebih baik.