這是 wasm-pack未發布文件,已發布的文件可在 Rust 和 WebAssembly 主要文件網站 上找到。 此處記錄的功能在 wasm-pack 的發行版本中可能無法使用。

tests/web.rs

web.rs 是一個 使用 Cargo 定義的整合測試,旨在透過 wasm-pack test 指令在無頭網頁瀏覽器中執行。

它包含三個關鍵部分

  1. #[wasm_bindgen_test] 函式
  2. crate 設定
  3. #![cfg] 指令

1. #[wasm_bindgen_test] 函式

#[wasm_bindgen_test] 就像 一般的 Rust #[test] 屬性,除了它定義了一個 WebAssembly 和無頭網頁瀏覽器測試可以存取的測試。

注意:最終 #[test] 也將與 WebAssembly 一起使用! 但目前 自訂測試框架 還不穩定。

#![allow(unused)]
fn main() {
#[wasm_bindgen_test]
fn pass() {
    assert_eq!(1 + 1, 2);
}
}

這裡的 pass 函式是一個單元測試,它斷言 WebAssembly 中的算術運算與我們在其他地方預期的一樣。 如果測試發生 panic(例如 assert_eq! 為 false),則測試將失敗,否則測試將成功。

#[wasm_bindgen_test] 的參考文件 應該有更多關於定義這些測試的資訊。

2. crate 設定

除了這個模組中的測試之外,我們還會看到

#![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 巨集(以 ! 結尾表示)用於指示測試旨在在網頁瀏覽器中執行,而不是預設的 Node.js。

3. #![cfg] 指令

我們會注意到關於這個 crate 的最後一部分是頂部的這個語句

#![allow(unused)]
#![cfg(target_arch = "wasm32")]
fn main() {
}

這個語句表示測試僅適用於 wasm32 架構,或者 wasm32-unknown-unknown 目標。 如果程式庫也正在為其他平台開發,這可以讓 cargo test 在您的專案中運作,方法是確保這些測試僅在網頁瀏覽器中執行。