克隆请求响应



我目前正在尝试使用activ-web和reqwest测试API端点。

我可以插入一些记录(使用sqlx(,然后发出请求并检查它是否返回了200 HTTP状态,并确认返回的数据属于用户创建的数据-端点返回了预期的数据。但是,这样做是";"顺序相关";,否则我会收到以下错误:

移动值的借用:response
移动rustc(E0382(后此处借用的值

这就是导致错误的原因:

let inserted_user = sqlx::query!(
r#"
INSERT INTO users (name)
VALUES ($1)
RETURNING id
"#,
String::from("john"),
)
.fetch_one(&app.db_pool)
.await
.unwrap();
let response = client
.get(&format!("{}/", &app.address))
.send()
.await?;
let users: Vec<User> = response.json().await?;
assert_eq!(inserted_user.id, users[0].id);
assert!(response.status().is_success());

如果我交换response.status()上断言的顺序,那么使用assert_eq!就可以了。但我认为这不是最好的方式,正如应该明确指出的那样,通过评论或进一步了解这项工作以这种特定的方式进行。

如果我不能克隆reqwest响应,我能做些什么来避免依赖断言的顺序吗?或者我如何克隆它?

老实说,我认为在得到响应后断言更有意义。为什么你要分析响应,只然后断言响应是OK的?如果响应一开始就不正常,那么解析很可能无论如何都会失败,你甚至无法到达断言,不是吗?

但是,如果您真的想在这一点上进行断言,您可以在使用响应之前将response.status()放入一个临时的:

let status = respons.status();
let users: Vec<User> = response.json().await?;
assert_eq!(inserted_user.id, users[0].id);
assert!(status.is_success());

相关内容

  • 没有找到相关文章

最新更新