我正在使用Rust和actix_web构建一个Web API服务。
我想测试一个路由并检查接收到的响应体是否是我所期望的。但是我正在努力将收到的body ResponseBody<Body>
转换为JSON或BSON。被调用的路由实际上返回application/json
。
let mut app = test::init_service(App::new()
.data(AppState { database: db.clone() })
.route("/recipes/{id}", web::post().to(add_one_recipe))
).await;
let payload = create_one_recipe().as_document().unwrap().clone();
let req = test::TestRequest::post()
.set_json(&payload).uri("/recipes/new").to_request();
let mut resp = test::call_service(&mut app, req).await;
let body: ResponseBody<Body> = resp.take_body(); // Here I want the body as Binary, String, JSON, or BSON. The response is actually application/json.
4条答案
按热度按时间i86rm4rw1#
actix/examples仓库通过定义一个名为BodyTest的新trait来实现这一点。
Actix Web 3
之后,你可以简单地做:
Actix Web 4
这个特性现在简单多了(你可以完全跳过):
并使用它:
参考完整代码,这些摘录摘自:https://github.com/actix/examples/blob/master/forms/form/src/main.rs
ma8fv8wu2#
看看Body和ResponseBody,这看起来像是一种方法:
pn9klfpd3#
这适用于一次性测试,主体和状态代码:
ni65a41a4#
请参阅doc