guide/src/wasm-bindgen-test/coverage.md
You can ask the runner to generate coverage data from functions marked as #[wasm_bindgen_test] in the .profraw format.
To enable this feature, you need to enable cfg(wasm_bindgen_unstable_test_coverage).
RUSTFLAGS that need to be presentMake sure you are using RUSTFLAGS=-Cinstrument-coverage -Zno-profiler-runtime.
Due to the current limitation of llvm-cov, we can't collect profiling symbols from the generated .wasm files. Instead, we can grab them from the LLVM IR with --emit=llvm-ir by using Clang. Usage of Clang or any LLVM tools must match the LLVM version used by Rust.
Like with Rust test coverage, you can use the LLVM_PROFILE_FILE environment variable to specify a path for the generated .profraw files.
This feature relies on the minicov crate, which provides a profiling runtime for WebAssembly. It in turn uses cc to compile the runtime to Wasm, which currently doesn't support accounting for target feature. Use e.g. CFLAGS_wasm32_unknown_unknown="-matomics -mbulk-memory" to account for that.
Requires rust >= 1.87.0 and wasm-bindgen-test >= 0.3.57.
Install cargo-llvm-cov and run with:
CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER=wasm-bindgen-test-runner \
CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUSTFLAGS="-Cinstrument-coverage -Zno-profiler-runtime -Clink-args=--no-gc-sections --cfg=wasm_bindgen_unstable_test_coverage" \
cargo +nightly llvm-cov test --target wasm32-unknown-unknown
These methods have originally been pioneered by Hacken OÜ, see their guide as well.