tests/web.rs

web.rs 是一个与 Cargo 定义的集成测试 ,旨在通过 wasm-pack test 命令在无头 Web 浏览器中运行。

它包含三个关键部分

  1. #[wasm_bindgen_test] 函数
  2. Crate 配置
  3. #![cfg] 指令

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 浏览器中执行。