macro_rules! assert_response_matches {
    ($res:ident, $status:ident) => { ... };
    ($res:ident, $status:ident; $($hdr_name:expr => $hdr_val:expr)+) => { ... };
    ($res:ident, $status:ident; @raw $payload:expr) => { ... };
    ($res:ident, $status:ident; $($hdr_name:expr => $hdr_val:expr)+; @raw $payload:expr) => { ... };
    ($res:ident, $status:ident; @json $payload:tt) => { ... };
}
Expand description

Quickly write tests that check various parts of a ServiceResponse.

An async test must be used (e.g., #[actix_web::test]) if used to assert on response body.

§Examples

use actix_web::{
    dev::ServiceResponse, http::header::ContentType, test::TestRequest, HttpResponse,
};
use actix_web_lab::assert_response_matches;

let res = ServiceResponse::new(
    TestRequest::default().to_http_request(),
    HttpResponse::Created()
        .insert_header(("date", "today"))
        .insert_header(("set-cookie", "a=b"))
        .body("Hello World!"),
);

assert_response_matches!(res, CREATED);
assert_response_matches!(res, CREATED; "date" => "today");
assert_response_matches!(res, CREATED; @raw "Hello World!");

let res = ServiceResponse::new(
    TestRequest::default().to_http_request(),
    HttpResponse::Created()
        .insert_header(("date", "today"))
        .insert_header(("set-cookie", "a=b"))
        .body("Hello World!"),
);

assert_response_matches!(res, CREATED;
    "date" => "today"
    "set-cookie" => "a=b";
    @raw "Hello World!"
);

let res = ServiceResponse::new(
    TestRequest::default().to_http_request(),
    HttpResponse::Created()
        .content_type(ContentType::json())
        .insert_header(("date", "today"))
        .insert_header(("set-cookie", "a=b"))
        .body(r#"{"abc":"123"}"#),
);

assert_response_matches!(res, CREATED; @json { "abc": "123" });