首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为reqwest编写测试?

如何为reqwest编写测试?
EN

Stack Overflow用户
提问于 2022-01-24 14:13:40
回答 1查看 474关注 0票数 1

我想在某个API中提出一个请求,所以我做了以下操作:

代码语言:javascript
复制
pub fn address_by_alias(node_url: &str, alias: &str) -> Result<(), Box<dyn std::error::Error>> {
    let full_url = format!("{}/addresses/alias/by-alias/{}", node_url, alias);
    let response = reqwest::blocking::get(full_url)?.json()?;
    dbg!(response);
    Ok(())
}

我想写一个测试,终端返回这个错误

代码语言:javascript
复制
#[test]
fn test_address_by_alias() { 
    let response = address_by_alias("https://lunesnode.lunes.io", "gabriel");
    let response_json = "address: 3868pVhDQAs2v5MGxNN75CaHzyx1YV8TivM";
    assert_eq!(response_json, response)
}

错误:

代码语言:javascript
复制
         assert_eq!(response_json, response)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `&str == Result<(), Box<dyn std::error::Error

我怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-24 21:00:37

现在,您的address_by_alias函数正在返回单元类型(),因此无法将()与&str进行比较并接收true。您需要修改address_by_alias的返回值。

您可以将从请求接收到的响应JSON返回为HashMap:

代码语言:javascript
复制
pub fn address_by_alias(
    node_url: &str,
    alias: &str,
) -> Result<HashMap<String, String>, Box<dyn std::error::Error>> {
    let full_url = format!("{}/addresses/alias/by-alias/{}", node_url, alias);
    Ok(reqwest::blocking::get(full_url)?.json::<HashMap<String, String>>()?)
}

因此,在执行address_by_alias时,您将能够在测试范围内存储来自请求的响应值。

对于测试部分,您可以手动创建一个HashMap<String, String>,它可以与address_by_alias返回的内容进行比较:

代码语言:javascript
复制
#[test]
fn test_address_by_alias() {
    let response = address_by_alias("https://lunesnode.lunes.io", "gabriel").unwrap();
    let mut response_json = HashMap::new();
    response_json.insert(
        "address".to_string(),
        "3868pVhDQAs2v5MGxNN75CaHzyx1YV8TivM".to_string(),
    );
    assert_eq!(response_json, response);
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70835232

复制
相关文章

相似问题

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