tests/web.rs - Hello wasm-pack! (original) (raw)
- 1. Introduction
- 2. Quickstart
- 3. Prerequisites
- 4. Commands
- 5. Tutorials
- 6. Cargo.toml Configuration
- 7. Contributing
Hello wasm-pack!
web.rs
is an integration test defined with Cargo that is intended to be run in a headless web browser via the wasm-pack test
command.
It contains three key parts:
1. #[wasm_bindgen_test] functions
The #[wasm_bindgen_test]
is like the normal Rust #[test]attribute, except it defines a test accessible to WebAssembly and headless web browser testing.
Note: Eventually
#[test]
will work with WebAssembly as well! Currently though custom test frameworks are not stable.
# #![allow(unused_variables)]
#fn main() {
#[wasm_bindgen_test]
fn pass() {
assert_eq!(1 + 1, 2);
}
#}
Here the pass
function is a unit test which asserts that arithmetic works in WebAssembly like we'd expect everywhere else. If the test panics (such as theassert_eq!
being false) then the test will fail, otherwise the test will succeed.
The reference documentation for #[wasm_bindgen_test] should have more information about defining these tests.
Other than the test in this module, we'll also see:
# #![allow(unused_variables)]
#fn main() {
use wasm_bindgen_test::*;
wasm_bindgen_test_configure!(run_in_browser);
#}
Like we saw earlier in src/lib.rs
the *
import pulls in everything fromwasm_bindgen_test
, notably the wasm_bindgen_test_configure
macro and thewasm_bindgen_test
attribute.
The wasm_bindgen_test_configure
macro (denoted by ending in !
) is used to indicate that the test is intended to execute in a web browser as opposed to Node.js, which is the default.
The last part we'll notice about this crate is this statement at the top:
# #![allow(unused_variables)]
#![cfg(target_arch = "wasm32")]
#fn main() {
#}
This statement means that the test is only intended for the wasm32
architecture, or the wasm32-unknown-unknown
target. This enables cargo test
to work in your project if the library is also being developed for other platforms by ensuring that these tests only execute in a web browser.