tests/web.rs
web.rs
是一個 使用 Cargo 定義的整合測試,旨在透過 wasm-pack test
指令在無頭網頁瀏覽器中執行。
它包含三個關鍵部分
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
在您的專案中運作,方法是確保這些測試僅在網頁瀏覽器中執行。