【发布时间】:2021-07-12 07:45:21
【问题描述】:
我目前正在尝试使用 actix-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! 交换,它就可以工作。但我认为这不是最好的方法,正如它应该明确指出的那样,用 cmets 或进一步的知识表明它以这种特定的方式工作。
如果我无法克隆 reqwest 响应,是否可以避免依赖断言的顺序?或者我如何克隆它?
【问题讨论】: