这是 wasm-pack 的**未发布**文档,已发布的文档可在 Rust 和 WebAssembly 主文档网站上找到 。此处记录的功能可能在 wasm-pack 的发布版本中不可用。

tests/web.rs

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

它包含三个关键部分

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

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