如何在测试中查看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
相关产品推荐
相关产品推荐

