Expand description
Test utilities to test your filters.
Filter
s can be easily tested without starting up an HTTP
server, by making use of the RequestBuilder
in this
module.
§Testing Filters
It’s easy to test filters, especially if smaller filters are used to build up your full set. Consider these example filters:
use warp::Filter;
fn sum() -> impl Filter<Extract = (u32,), Error = warp::Rejection> + Copy {
warp::path::param()
.and(warp::path::param())
.map(|x: u32, y: u32| {
x + y
})
}
fn math() -> impl Filter<Extract = (String,), Error = warp::Rejection> + Copy {
warp::post()
.and(sum())
.map(|z: u32| {
format!("Sum = {}", z)
})
}
We can test some requests against the sum
filter like this:
#[tokio::test]
async fn test_sum() {
let filter = sum();
// Execute `sum` and get the `Extract` back.
let value = warp::test::request()
.path("/1/2")
.filter(&filter)
.await
.unwrap();
assert_eq!(value, 3);
// Or simply test if a request matches (doesn't reject).
assert!(
warp::test::request()
.path("/1/-5")
.matches(&filter)
.await
);
}
If the filter returns something that implements Reply
, and thus can be
turned into a response sent back to the client, we can test what exact
response is returned. The math
filter uses the sum
filter, but returns
a String
that can be turned into a response.
#[test]
fn test_math() {
let filter = math();
let res = warp::test::request()
.path("/1/2")
.reply(&filter);
assert_eq!(res.status(), 405, "GET is not allowed");
let res = warp::test::request()
.method("POST")
.path("/1/2")
.reply(&filter);
assert_eq!(res.status(), 200);
assert_eq!(res.body(), "Sum is 3");
}
Modules§
- inner 🔒
Structs§
- A request builder for testing filters.
- An error from Websocket filter tests.
Functions§
- Starts a new test
RequestBuilder
.