rust actix web测试似乎没有按预期路由请求

41zrol4v  于 2022-12-19  发布在  其他
关注(0)|答案(2)|浏览(151)

我最近更新到了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

但是,我尝试过的其他路由组合都没有调用请求处理程序。

pxy2qtax

pxy2qtax1#

Rust测试捕获输出,并且仅输出失败测试的输出。
如果你想显示所有测试的输出,你必须告诉他们用testbinary --nocapturecargo test -- --nocapture来做。

yhived7q

yhived7q2#

我能够通过将作用域中的路径更改为空字符串来使事情正常工作

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;

// prints "Hello?"

相关问题