我目前正在尝试使用actix和reqwest测试一个API端点。
我可以插入一些记录(使用sqlx),然后发出请求并检查它返回200 HTTP状态,并证实返回的数据属于创建的用户--端点返回了预期的值。但是,这样做是“订单依赖的”,否则我会收到以下错误:
借用移动价值:
response
移动锈迹后在此借入的值(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响应,是否可以避免依赖断言的顺序?或者我怎么克隆它?
发布于 2021-07-12 08:07:08
老实说,我认为在你得到回应之后,这个断言更有意义。为什么要解析响应,然后才断言响应还可以呢?如果响应一开始就不确定,那么解析就很可能失败,您甚至都不会到达断言,不是吗?
但是,如果您真的想在这一点上执行断言,则只需在使用响应之前将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());https://stackoverflow.com/questions/68343692
复制相似问题