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)] fn main() { #[wasm_bindgen_test] fn pass() { assert_eq!(1 + 1, 2); } }
这里 pass
函数是一个单元测试,它断言算术在 WebAssembly 中按预期工作,就像我们在其他地方一样。如果测试出现恐慌(例如 assert_eq!
为假),则测试将失败,否则测试将成功。
有关 #[wasm_bindgen_test]
的 参考文档 应该包含有关定义这些测试的更多信息。
2. 箱子配置
除了此模块中的测试外,我们还将看到
#![allow(unused)] 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]
指令
我们将注意到的关于此箱子的最后一部分是此语句位于顶部
#![allow(unused)] #![cfg(target_arch = "wasm32")] fn main() { }
此语句意味着测试仅适用于 wasm32
架构,或 wasm32-unknown-unknown
目标。这使 cargo test
能够在您的项目中工作,即使库也正在为其他平台开发,方法是确保这些测试仅在 Web 浏览器中执行。