tests/web.rs
web.rs
是一个与 Cargo 定义的集成测试 ,旨在通过 wasm-pack test
命令在无头 Web 浏览器中运行。
它包含三个关键部分
1. #[wasm_bindgen_test]
函数
#[wasm_bindgen_test]
类似于 普通的 Rust #[test]
属性,但它定义了一个可供 WebAssembly 和无头 Web 浏览器测试访问的测试。
注意:最终
#[test]
也将与 WebAssembly 一起使用!但是,目前 自定义测试框架 并不稳定。
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen_test] fn pass() { assert_eq!(1 + 1, 2); } #}
这里 pass
函数是一个单元测试,它断言算术在 WebAssembly 中按预期工作,就像我们在其他地方一样。如果测试出现恐慌(例如 assert_eq!
为假),则测试将失败,否则测试将成功。
有关定义这些测试的更多信息,请参阅 #[wasm_bindgen_test]
的参考文档。
2. Crate 配置
除了此模块中的测试之外,我们还将看到
# #![allow(unused_variables)] #fn main() { use wasm_bindgen_test::*; wasm_bindgen_test_configure!(run_in_browser); #}
就像我们在 src/lib.rs
中看到的那样,*
导入从 wasm_bindgen_test
中提取所有内容,特别是 wasm_bindgen_test_configure
宏和 wasm_bindgen_test
属性。
wasm_bindgen_test_configure
宏(以 !
结尾)用于指示测试旨在在 Web 浏览器中执行,而不是 Node.js,这是默认值。
3. #![cfg]
指令
我们将注意到的关于此 crate 的最后一部分是此语句位于顶部
# #![allow(unused_variables)] #![cfg(target_arch = "wasm32")] #fn main() { #}
此语句意味着测试仅适用于 wasm32
架构,或 wasm32-unknown-unknown
目标。如果库也正在为其他平台开发,这将使 cargo test
在您的项目中工作,方法是确保这些测试仅在 Web 浏览器中执行。