使用 `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);
}
}

编写测试与普通的 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