Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/davidpdrsn/assert-json-diff
Easily compare two JSON values and get great output
https://github.com/davidpdrsn/assert-json-diff
Last synced: 12 days ago
JSON representation
Easily compare two JSON values and get great output
- Host: GitHub
- URL: https://github.com/davidpdrsn/assert-json-diff
- Owner: davidpdrsn
- License: mit
- Created: 2018-10-17T08:04:27.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2023-12-26T15:06:25.000Z (11 months ago)
- Last Synced: 2024-10-25T06:27:43.103Z (19 days ago)
- Language: Rust
- Homepage: https://crates.io/crates/assert-json-diff
- Size: 46.9 KB
- Stars: 80
- Watchers: 6
- Forks: 17
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
[![Crates.io](https://img.shields.io/crates/v/assert-json-diff.svg)](https://crates.io/crates/assert-json-diff)
[![Docs](https://docs.rs/assert-json-diff/badge.svg)](https://docs.rs/assert-json-diff)
[![dependency status](https://deps.rs/repo/github/davidpdrsn/assert-json-diff/status.svg)](https://deps.rs/repo/github/davidpdrsn/assert-json-diff)
[![Build status](https://github.com/davidpdrsn/assert-json-diff/workflows/CI/badge.svg)](https://github.com/davidpdrsn/assert-json-diff/actions)
![maintenance-status](https://img.shields.io/badge/maintenance-passively--maintained-yellowgreen.svg)# assert-json-diff
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.
[serde]: https://crates.io/crates/serde
[serde_json]: https://crates.io/crates/serde_json
[`assert_eq!`]: https://doc.rust-lang.org/std/macro.assert_eq.html### Partial matching
If you want to assert that one JSON value is "included" in another use
[`assert_json_include`](macro.assert_json_include.html):```rust
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`](macro.assert_json_include.html) 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:```rust
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:
```rust
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`](macro.assert_json_eq.html).
```rust
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.
License: MIT