Aserción profunda en la matriz JOSN con contiene en 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' }]
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
Simplemente agregando la palabra deep
funciona 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.