使用 wasm-bindgen-test
将 wasm-bindgen-test
添加到您的 Cargo.toml
的 [dev-dependencies]
中
[dev-dependencies]
wasm-bindgen-test = "0.3.0"
请注意,wasm-bindgen-test
的 0.3.0
版本支持 Rust 1.39.0+,这目前是 nightly 频道(截至 2019-09-05)。如果您想要支持较旧的编译器,请使用 wasm-bindgen-test
的 0.2.*
版本。
编写一些测试
创建一个 $MY_CRATE/tests/wasm.rs
文件
#![allow(unused)] fn main() { use wasm_bindgen_test::*; #[wasm_bindgen_test] fn pass() { assert_eq!(1, 1); } #[wasm_bindgen_test] fn fail() { assert_eq!(1, 2); } // On a target other then `wasm32-unknown-unknown`, the `#[test]` attribute // will be used instead, allowing this test to run on any target. #[wasm_bindgen_test(unsupported = test)] fn all_targets() { assert_eq!(1, 2); } }
编写测试与普通的 Rust #[test]
相同,只是我们使用了 #[wasm_bindgen_test]
属性。
另一个不同之处是,测试**必须**位于 crate 的根目录,或在 pub mod
中。将它们放在私有模块内将不起作用。
执行您的测试
使用 wasm-pack test
运行测试。默认情况下,测试是为 Node.js 生成的,但您也可以配置测试以在无头浏览器中运行。
$ wasm-pack test --node
Finished dev [unoptimized + debuginfo] target(s) in 0.11s
Running /home/.../target/wasm32-unknown-unknown/debug/deps/wasm-4a309ffe6ad80503.wasm
running 2 tests
test wasm::pass ... ok
test wasm::fail ... FAILED
failures:
---- wasm::fail output ----
error output:
panicked at 'assertion failed: `(left == right)`
left: `1`,
right: `2`', crates/test/tests/wasm.rs:14:5
JS exception that was thrown:
RuntimeError: unreachable
at __rust_start_panic (wasm-function[1362]:33)
at rust_panic (wasm-function[1357]:30)
at std::panicking::rust_panic_with_hook::h56e5e464b0e7fc22 (wasm-function[1352]:444)
at std::panicking::continue_panic_fmt::had70ba48785b9a8f (wasm-function[1350]:122)
at std::panicking::begin_panic_fmt::h991e7d1ca9bf9c0c (wasm-function[1351]:95)
at wasm::fail::ha4c23c69dfa0eea9 (wasm-function[88]:477)
at core::ops::function::FnOnce::call_once::h633718dad359559a (wasm-function[21]:22)
at wasm_bindgen_test::__rt::Context::execute::h2f669104986475eb (wasm-function[13]:291)
at __wbg_test_fail_1 (wasm-function[87]:57)
at module.exports.__wbg_apply_2ba774592c5223a7 (/home/alex/code/wasm-bindgen/target/wasm32-unknown-unknown/wbg-tmp/wasm-4a309ffe6ad80503.js:61:66)
failures:
wasm::fail
test result: FAILED. 1 passed; 1 failed; 0 ignored
error: test failed, to rerun pass '--test wasm'
就是这样!
附录:在没有 wasm-pack
的情况下使用 wasm-bindgen-test
⚠️ 使用 wasm-bindgen-test
的推荐方法是使用 wasm-pack
,因为它将处理安装测试运行器,为您的浏览器安装 WebDriver 客户端,并告知 cargo
如何使用自定义测试运行器。但是,如果您愿意,您也可以自己管理这些任务。
除了上面的步骤之外,您还必须执行以下操作。
安装测试运行器
测试运行器随主 wasm-bindgen
CLI 工具一起提供。请确保将“X.Y.Z”替换为 Cargo.toml
中已有的 wasm-bindgen
的相同版本!
cargo install wasm-bindgen-cli --vers "X.Y.Z"
配置 .cargo/config
以使用测试运行器
将此添加到 $MY_CRATE/.cargo/config
[target.wasm32-unknown-unknown]
runner = 'wasm-bindgen-test-runner'
运行测试
通过将 --target wasm32-unknown-unknown
传递给 cargo test
来运行测试
cargo test --target wasm32-unknown-unknown
如果您还需要运行 doctests,请添加不稳定的-Zdoctest-xcompile
标志。这需要像这样使用 Rust nightly 频道
cargo +nightly test --target wasm32-unknown-unknown -Zdoctest-xcompile