Build complex, self-describing assertions by chaining together reusable methods. Supports both synchronous and asynchronous assertions.
use expecters::prelude::*;
#[tokio::test]
async fn test() {
expect!(1, as_display, to_equal("1"));
expect!(1..=5, count, to_equal(5));
expect!(
[get_cat_url(0), get_cat_url(40), get_cat_url(42)],
all,
when_ready,
to_end_with("0.png"),
)
.await;
}
async fn get_cat_url(id: u32) -> String {
format!("cats/{id}.png")
}
Error message:
thread 'test' panicked at README.md:13:6:
assertion failed:
at: README.md:8:5 [readme_example]
subject: [get_cat_url(0), get_cat_url(40), get_cat_url(42)]
steps:
all:
received: ? (no debug representation)
index: 2
when_ready:
received: ? (no debug representation)
to_end_with: substring not found
received: "cats/42.png"
expected: "0.png"
Supports:
- colored messages with the
colors
feature - diffing with the
diff
feature - async assertions with the
futures
feature - regular expressions with the
regex
feature
Check how outputs differ based on their Display
representations where
available:
---- string_diff stdout ----
thread 'string_diff' panicked at tests\examples.rs:8:5:
assertion failed:
at: tests\examples.rs:8:5 [examples]
subject: "The quick\nbrown fox\njumped over\nthe lazy\ndog."
steps:
to_equal: [1] values not equal
received: "The quick\nbrown fox\njumped over\nthe lazy\ndog."
expected: "the quick brown\nspotted fox\njumped over\nthe lazyish\ndog."
----- diff [1] -----
- the quick brown
+ The quick
- spotted fox
+ brown fox
jumped over
- the lazyish
+ the lazy
dog.
Or, for types that only implement Debug
, use that representation automatically
instead:
---- debug_diff stdout ----
thread 'debug_diff' panicked at tests\examples.rs:28:5:
assertion failed:
at: tests\examples.rs:28:5 [examples]
subject: [A { inner: 1 }, A { inner: 3 }, A { inner: 3 }, A { inner: 512 }, A { inner: 761 }]
steps:
to_equal: [1] values not equal
received: [A { inner: 1 }, A { inner: 3 }, A { inner: 3 }, A { inner: 512 }, A { inner: 761 }]
expected: [A { inner: 1 }, A { inner: 2 }, A { inner: 3 }, A { inner: 513 }, A { inner: 761 }]
----- diff [1] -----
[
A {
inner: 1,
},
A {
- inner: 2,
+ inner: 3,
},
A {
inner: 3,
},
A {
- inner: 513,
+ inner: 512,
},
A {
inner: 761,
},
]
For colored output, try running some of the example tests in the tests/
directory.
Assertion | Description |
---|---|
to_equal |
x == y |
to_equal_approximately |
|x - y| < d |
to_be_greater_than |
x > y |
to_be_greater_than_or_equal_to |
x >= y |
to_be_less_than |
x < y |
to_be_less_than_or_equal_to |
x <= y |
to_be_one_of |
x in [y1, y2, ...] |
to_satisfy |
f(x) -> true |
to_satisfy_with |
f(x) -> Ok |
Modifier | Description |
---|---|
not |
negates result |
map |
maps subject |
Assertion | Description |
---|---|
to_be_some |
x is Some |
to_be_none |
x is None |
Modifier | Description |
---|---|
to_be_some_and |
extracts Some |
Assertion | Description |
---|---|
to_be_ok |
x is Ok |
to_be_err |
x is Err |
Modifier | Description |
---|---|
to_be_ok_and |
extracts Ok |
to_be_err_and |
extracts Err |
Assertion | Description | Requires feature |
---|---|---|
to_contain_substr |
x contains y | |
to_start_with |
x starts with y | |
to_end_with |
x ends with y | |
to_match_regex |
x matches pattern | regex |
Modifier | Description |
---|---|
chars |
map subject to char sequence |
as_debug |
map subject to Debug representation |
as_display |
map subject to Display representation |
Assertion | Description |
---|---|
to_contain |
x contains y |
to_contain_exactly |
x is sequentially equal to y |
Modifier | Description |
---|---|
all |
each item satisfies assertion |
any |
at least one item satisfies assertion |
count |
counts items |
nth |
gets nth item |
as_utf8 |
parses as utf8 |
Modifier | Description | Requires feature |
---|---|---|
when_read |
reads into byte buffer | |
when_read_async |
asynchronously reads into byte buffer | futures |
Modifier | Description | Requires feature |
---|---|---|
when_ready |
gets output | futures |
when_ready_before |
gets output if it completes before y | futures |
when_ready_after |
gets output if it completes after y | futures |
This repository is dual licensed under MIT and APACHE-2.0. You may choose which license you wish to use.