You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在测试中查看wasm_bindgen::JsError的详细错误信息?

解决wasm_bindgen测试中JsError无法获取有效信息的问题

方法1:使用JsError::as_string()提取错误文本

JsError内置了as_string()方法,可将错误转换为Option<String>,直接获取错误的文本描述:

#[wasm_bindgen_test]
pub fn my_test() {
    // ...
    match my_fn(params) {
        Ok(result) => { /* 处理正常结果 */ }
        Err(err) => {
            let err_msg = err.as_string().unwrap_or_else(|| "未知JS错误".to_string());
            panic!("调用my_fn失败: {}", err_msg);
        }
    }
}

如果想简化写法,也可以结合expect使用:

let js_return = my_fn(params)
    .map_err(|err| err.as_string().unwrap_or("未知错误".into()))
    .expect("调用my_fn失败");

方法2:序列化JsError为JSON获取完整详情

如果需要错误的完整对象信息(比如栈追踪、额外属性),可以将JsError转为JsValue后用JSON序列化:

use js_sys::JSON;
use wasm_bindgen::JsCast;

#[wasm_bindgen_test]
pub fn my_test() {
    // ...
    if let Err(err) = my_fn(params) {
        let err_js_value: &JsValue = err.as_ref();
        let err_json = JSON::stringify(err_js_value)
            .unwrap_or_else(|_| "无法序列化错误对象".into());
        panic!("调用my_fn失败,错误详情: {}", err_json);
    }
}

方法3:用浏览器控制台打印完整错误

在测试环境中,直接调用浏览器的console.error可以输出JS错误的完整信息(包括栈追踪),适合调试:

use web_sys::console;

#[wasm_bindgen_test]
pub fn my_test() {
    // ...
    if let Err(err) = my_fn(params) {
        console::error_1(&err.into()); // 将JsError转为JsValue传入控制台
        panic!("测试因JS错误失败");
    }
}

为什么直接格式化会失败?

JsError并没有实现Rust标准库中的Debug或Display trait,所以无法直接用{:?}或{}这类格式化语法处理,必须通过它提供的方法或转换为JS对象来提取信息。

内容的提问来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:40:33