tests/web.rs
web.rs
是一個整合測試,使用 Cargo 定義,旨在透過 wasm-pack test
命令在無頭網頁瀏覽器中執行。
它包含三個關鍵部分
1. #[wasm_bindgen_test]
函式
#[wasm_bindgen_test]
類似於 一般的 Rust #[test]
屬性,不同之處在於它定義了一個可供 WebAssembly 和無頭網頁瀏覽器測試存取的測試。
注意:最終
#[test]
也將與 WebAssembly 兼容!但目前 自定義測試框架 還不穩定。
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen_test] fn pass() { assert_eq!(1 + 1, 2); } #}
這裡的 pass
函式是一個單元測試,它斷言 WebAssembly 中的算術運算與我們期望在其他地方一樣。如果測試出現 panic(例如 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
巨集(以 !
結尾表示)用於指示測試旨在在網頁瀏覽器中執行,而不是預設的 Node.js。
3. #![cfg]
指令
我們會注意到的關於這個 Crate 的最後一部分是頂部的這個語句
# #![allow(unused_variables)] #![cfg(target_arch = "wasm32")] #fn main() { #}
這個語句表示測試僅適用於 wasm32
架構,或 wasm32-unknown-unknown
目標。這可以讓 cargo test
在您的專案中運作,即使函式庫也正在為其他平台開發,方法是確保這些測試僅在網頁瀏覽器中執行。