Crate assert_json_diff[−][src]
This crate includes macros for comparing two serializable values by diffing their JSON
representations. It is designed to give much more helpful error messages than the standard
assert_eq!
. It basically does a diff of the two objects and tells you the exact
differences. This is useful when asserting that two large JSON objects are the same.
It uses the serde and serde_json to perform the serialization.
Partial matching
If you want to assert that one JSON value is "included" in another use
assert_json_include
:
use assert_json_diff::assert_json_include; use serde_json::json; let a = json!({ "data": { "users": [ { "id": 1, "country": { "name": "Denmark" } }, { "id": 24, "country": { "name": "Denmark" } } ] } }); let b = json!({ "data": { "users": [ { "id": 1, "country": { "name": "Sweden" } }, { "id": 2, "country": { "name": "Denmark" } } ] } }); assert_json_include!(actual: a, expected: b)
This will panic with the error message:
json atoms at path ".data.users[0].country.name" are not equal:
expected:
"Sweden"
actual:
"Denmark"
json atoms at path ".data.users[1].id" are not equal:
expected:
2
actual:
24
assert_json_include
allows extra data in actual
but not in expected
. That is so you can verify just a part
of the JSON without having to specify the whole thing. For example this test passes:
use assert_json_diff::assert_json_include; use serde_json::json; assert_json_include!( actual: json!({ "a": { "b": 1 }, }), expected: json!({ "a": {}, }) )
However expected
cannot contain additional data so this test fails:
use assert_json_diff::assert_json_include; use serde_json::json; assert_json_include!( actual: json!({ "a": {}, }), expected: json!({ "a": { "b": 1 }, }) )
That will print
json atom at path ".a.b" is missing from actual
Exact matching
If you want to ensure two JSON values are exactly the same, use assert_json_eq
.
use assert_json_diff::assert_json_eq; use serde_json::json; assert_json_eq!( json!({ "a": { "b": 1 } }), json!({ "a": {} }) )
This will panic with the error message:
json atom at path ".a.b" is missing from lhs
Further customization
You can use assert_json_matches
to further customize the comparison.
Macros
assert_json_eq | Compare two JSON values for an exact match. |
assert_json_include | Compare two JSON values for an inclusive match. |
assert_json_matches | Compare two JSON values according to a configuration. |
Structs
Config | Configuration for how JSON values should be compared. |
Enums
CompareMode | Mode for how JSON values should be compared. |
NumericMode | How should numbers be compared. |
Functions
assert_json_matches_no_panic | Compares two JSON values without panicking. |