tests/web.rs - Hello wasm-pack! (original) (raw)
- 1. Introduction
- 2. Quickstart
- 3. Prerequisites
- 4. Commands
- 5. Tutorials
- 6. Cargo.toml Configuration
- 7. Contributing
This documentation isno longer maintained at this domain, and is now maintained at drager.github.io/wasm-pack instead.
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 wasm32architecture, or the wasm32-unknown-unknown target. This enables cargo testto 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.