gpt4 book ai didi

rust - 如何在actix_web单元测试中获取响应的主体?

转载 作者:行者123 更新时间:2023-12-03 11:25:31 34 4
gpt4 key购买 nike

我正在使用 Rust 和 actix_web 构建 Web API 服务。
我想测试一条路线并检查收到的响应正文是否符合我的预期。但我正在努力转换收到的正文 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.

最佳答案

看看Body和 ResponseBody,这看起来像这样的方法:

use actix_web::{web, App, HttpResponse, HttpServer, Responder};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct Greet {
name: String,
}

async fn greet() -> impl Responder {
let body = serde_json::to_string(&Greet {
name: "Test".to_owned(),
})
.unwrap();
HttpResponse::Ok()
.content_type("application/json")
.body(body)
}

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().route("/", web::get().to(greet)))
.bind("127.0.0.1:8000")?
.run()
.await
}

#[cfg(test)]
mod tests {
use super::*;
use actix_web::{body::Body, test, web, App};
use serde_json::json;

#[actix_rt::test]
async fn test_greet_get() {
let mut app = test::init_service(App::new().route("/", web::get().to(greet))).await;
let req = test::TestRequest::with_header("content-type", "application/json").to_request();
let mut resp = test::call_service(&mut app, req).await;
let body = resp.take_body();
let body = body.as_ref().unwrap();
assert!(resp.status().is_success());
assert_eq!(
&Body::from(json!({"name":"Test"})), // or serde.....
body
);
}
}
running 1 test
test tests::test_greet_get ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

关于rust - 如何在actix_web单元测试中获取响应的主体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63910673/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com