我想在某个API中提出一个请求,所以我做了以下操作:
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(())
}我想写一个测试,终端返回这个错误
#[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)
}错误:
assert_eq!(response_json, response)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `&str == Result<(), Box<dyn std::error::Error我怎么解决这个问题?
发布于 2022-01-24 21:00:37
现在,您的address_by_alias函数正在返回单元类型(),因此无法将()与&str进行比较并接收true。您需要修改address_by_alias的返回值。
您可以将从请求接收到的响应JSON返回为HashMap:
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返回的内容进行比较:
#[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);
}https://stackoverflow.com/questions/70835232
复制相似问题