首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >克隆reqwest响应

克隆reqwest响应
EN

Stack Overflow用户
提问于 2021-07-12 07:45:21
回答 1查看 813关注 0票数 0

我目前正在尝试使用actix和reqwest测试一个API端点。

我可以插入一些记录(使用sqlx),然后发出请求并检查它返回200 HTTP状态,并证实返回的数据属于创建的用户--端点返回了预期的值。但是,这样做是“订单依赖的”,否则我会收到以下错误:

借用移动价值:response

移动锈迹后在此借入的值(E0382)

这就是导致错误的原因:

代码语言:javascript
复制
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响应,是否可以避免依赖断言的顺序?或者我怎么克隆它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 08:07:08

老实说,我认为在你得到回应之后,这个断言更有意义。为什么要解析响应,然后才断言响应还可以呢?如果响应一开始就不确定,那么解析就很可能失败,您甚至都不会到达断言,不是吗?

但是,如果您真的想在这一点上执行断言,则只需在使用响应之前将response.status()放到一个临时的位置:

代码语言:javascript
复制
let status = respons.status();
let users: Vec<User> = response.json().await?;
assert_eq!(inserted_user.id, users[0].id);
assert!(status.is_success());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68343692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档