Expand description
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:
24assert_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§
- Compare
Mode - Mode for how JSON values should be compared.
- Numeric
Mode - How should numbers be compared.
Functions§
- assert_
json_ matches_ no_ panic - Compares two JSON values without panicking.