我最近更新到了actixweb 4,我有一些测试使用了actix-web测试模块,在这个过程中停止了预期的工作。我相信这很简单,但我很难找出是什么改变了。这里是一个最小的问题的例子:
use actix_web::{test, web, App, HttpResponse, HttpRequest};
#[actix_rt::test]
async fn says_hello() {
let req = test::TestRequest::get().uri("/index.html").to_request();
let mut server =
test::init_service(App::new().service(web::scope("/").route("index.html", web::get().to(|_req: HttpRequest| async {
println!("Hello?");
HttpResponse::Ok()
})))).await;
let _resp = test::call_and_read_body(&mut server, req).await;
}
运行这个测试时,我希望看到控制台输出“Hello?”,但是,我在“/index.html”中定义的请求处理函数似乎没有被调用,也没有收到任何输出。
需要说明的是,测试更加复杂,并且有Assert等,这只是我试图解决的主要问题的一个工作示例
actix-web = {版本=“4.1.0”,默认功能=假}
注:
如果我将所有路径都更改为根路径,它将调用处理程序,即
let req = test::TestRequest::get().uri("/").to_request();
let mut server =
test::init_service(App::new().service(web::scope("/").route("/", web::get().to(|_req: HttpRequest| async {
println!("Hello?");
HttpResponse::Ok()
})))).await;
let _resp = test::call_and_read_body(&mut server, req).await;
// prints "Hello?" to the console
但是,我尝试过的其他路由组合都没有调用请求处理程序。
2条答案
按热度按时间pxy2qtax1#
Rust测试捕获输出,并且仅输出失败测试的输出。
如果你想显示所有测试的输出,你必须告诉他们用
testbinary --nocapture
或cargo test -- --nocapture
来做。yhived7q2#
我能够通过将作用域中的路径更改为空字符串来使事情正常工作