请求-本地数据是附加到单个请求的任意数据,通常通过中间件.它可以通过HttpRequest或ServiceRequest上的扩展_mut来设置
ReqData<T>
可以使用ReqData<T>
的extract
方法从HttpRequest中提取.
Refer个
文档说明了如何创建测试HttpRequesthere
有了这些信息,我们创建了一个测试HttpRequest,然后使用extensions_mut
方法设置ReqData,然后使用ReqData::extract
方法提取它.
Example:
use actix_web::{HttpResponse, web};
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
pub struct User {
id: u32,
name: String,
}
pub async fn handler(
some_data: web::Data<String>,
req_data: web::ReqData<User>
) -> HttpResponse {
// some code
println!("{:?}", some_data);
println!("{:?}", req_data);
HttpResponse::Ok().finish()
}
#[cfg(test)]
mod tests {
use actix_web::{test, FromRequest, HttpMessage, web::ReqData};
use super::*;
#[actix_rt::test]
async fn test_fn() {
let http_request = test::TestRequest::default().to_http_request();
http_request.extensions_mut().insert(User{id: 1, name: "User1".to_string()});
let _ = handler(
web::Data::new("Dummy data".to_string()),
ReqData::extract(&http_request).await.unwrap()
).await;
}
}