Ir al contenido principal
Versión: 5.2.x

Comparadores JSON

[Traducción Beta No Oficial]

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

NamePurposePossible valuesDefault value
PropertyOrderDetermines if the order of properties in JSON objects are considered when comparingPropertyOrder.Strict, PropertyOrder.LenientPropertyOrder.Lenient, i.e. order of properties DON'T matter
ArrayOrderDetermines if the order of elements in JSON arrays are considered when comparingArrayOrder.Strict, ArrayOrder.LenientArrayOrder.Strict, i.e. order of elements DO matter
FieldComparisonDetermines if comparison will fail if JSON objects actual contain extra properties, when compared to expectedFieldComparison.Strict, FieldComparison.LenientFieldComparison.Strict, i.e. extra properties will cause inequality
NumberFormatDetermines if comparison of numbers are strict with regards to number format. For instance, if 100.0 and 100 are considered equal.NumberFormat.Strict, NumberFormat.LenientNumberFormat.Lenient, i.e. number formats DON'T matter
TypeCoercionDetermines if types will try to be coerced, for instance when a string contains a number or boolean valueTypeCoercion.Enabled, TypeCoercion.DisabledTypeCoercion.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