Comparadores JSON
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Kotest ofrece potentes aserciones JSON en el módulo kotest-assertions-json.
Permiten pruebas flexibles de cadenas JSON sin preocuparse por el formato o el orden.
Proporcionan mensajes de error precisos al comparar JSON para que los fallos sean fácilmente localizables en estructuras grandes.
Este módulo está disponible para objetivos JVM y JS.
shouldEqualJson
json.shouldEqualJson(other) verifica que el lado izquierdo representa la misma estructura JSON que el lado derecho.
Este comparador permite diferencias de formato y orden de claves.
Por ejemplo, estas dos cadenas JSON se considerarían iguales:
{
"name": "sam",
"location": "chicago",
"age" : 41
}
y
{ "age" : 41, "name": "sam", "location": "chicago" }
El inverso es shouldNotEqualJson, que fallará si dos cadenas JSON son consideradas iguales.
compareJsonOptions
shouldEqualJson soporta un parámetro adicional de tipo CompareJsonOptions con estas opciones para modificar el comportamiento de la comparación:
Uso:
Las opciones pueden especificarse directamente:
a.shouldEqualJson(b, compareJsonOptions { arrayOrder = ArrayOrder.Strict })
Otra opción es definir una función de comparación personalizada:
val myOptions = compareJsonOptions {
typeCoercion = TypeCoercion.Enabled
arrayOrder = ArrayOrder.Lenient
}
infix fun String.lenientShouldEqualJson(other: String) = this.shouldEqualJson(other, myOptions)
"[1, 2]" lenientShouldEqualJson "[2, 1]" // This will pass
Parámetros
| Name | Purpose | Possible values | Default value |
|---|---|---|---|
PropertyOrder | Determines if the order of properties in JSON objects are considered when comparing | PropertyOrder.Strict, PropertyOrder.Lenient | PropertyOrder.Lenient, i.e. order of properties DON'T matter |
ArrayOrder | Determines if the order of elements in JSON arrays are considered when comparing | ArrayOrder.Strict, ArrayOrder.Lenient | ArrayOrder.Strict, i.e. order of elements DO matter |
FieldComparison | Determines if comparison will fail if JSON objects actual contain extra properties, when compared to expected | FieldComparison.Strict, FieldComparison.Lenient | FieldComparison.Strict, i.e. extra properties will cause inequality |
NumberFormat | Determines if comparison of numbers are strict with regards to number format. For instance, if 100.0 and 100 are considered equal. | NumberFormat.Strict, NumberFormat.Lenient | NumberFormat.Lenient, i.e. number formats DON'T matter |
TypeCoercion | Determines if types will try to be coerced, for instance when a string contains a number or boolean value | TypeCoercion.Enabled, TypeCoercion.Disabled | TypeCoercion.Disabled, i.e. types will NOT be coerced |
Objetivos: JVM, JS
shouldEqualSpecifiedJson
Alias de shouldEqualJson con opciones predeterminadas excepto FieldComparison, que usa FieldComparison.Lenient.
val a = """ { "a": true, "date": "2019-11-03" } """
val b = """ { "a": true } """
// this would pass
a shouldEqualSpecifiedJson b
// this would fail
a shouldEqualJson b
Objetivos: JVM, JS
shouldContainJsonKey
json.shouldContainJsonKey("$.json.path") verifica que una cadena JSON contiene la ruta especificada.
El inverso es shouldNotContainJsonKey, que fallará si la cadena JSON contiene la ruta especificada.
Objetivos: JVM
shouldContainJsonKeyValue
str.shouldContainJsonKeyValue("$.json.path", value) verifica que una cadena JSON contiene un value específico en la ruta indicada.
El inverso es shouldNotContainJsonKeyValue, que fallará si la cadena JSON contiene el valor especificado en esa ruta.
Objetivos: JVM
shouldMatchJsonResource
json.shouldMatchJsonResource("/file.json") verifica que el JSON coincide con el recurso de prueba /file.json, ignorando orden y formato.
Objetivos: JVM
Validación básica de JSON
Existen comparadores que simplemente validan que el JSON es válido y opcionalmente de cierto tipo.
shouldBeValidJson
shouldBeValidJson verifica que una cadena es JSON válido. El inverso shouldNotBeValidJson falla si la cadena es JSON válido.
Objetivos: JVM Desde: 5.2
shouldBeJsonObject
shouldBeJsonObject verifica que una cadena es un objeto JSON válido. El inverso shouldNotBeJsonObject falla si es un objeto.
Objetivos: JVM Desde: 5.2
shouldBeJsonArray
shouldBeJsonArray verifica que una cadena es un array JSON válido. El inverso shouldNotBeJsonArray falla si es un array.
Objetivos: JVM Desde: 5.2