The default Rust template for a Spin application sets the default build target in .cargo/config.toml as wasm32-wasi:
[build]
target = "wasm32-wasi"
This make sense in order to ensure cargo build creates a module that Spin can run, but this means that a simple unit test that purely wants to test some logic in the handler cannot be run:
- with a regular
cargo test, this fails because it would try to instantiate a Wasm binary and run the test:
.../target/wasm32-wasi/debug/deps/rust_api-a5d8eced053c53aa.wasm: cannot execute binary file
- with
cargo wasi test, this fails because of host imports that are not available in Wasmtime directly (but are in Spin):
wasm32-wasi/debug/deps/rust_api-a5d8eced053c53aa.wasm`
Error: failed to run main module `.../rust-api/target/wasm32-wasi/debug/deps/rust_api-a5d8eced053c53aa.wasm`
Caused by:
0: failed to instantiate ".../target/wasm32-wasi/debug/deps/rust_api-a5d8eced053c53aa.wasm"
1: unknown import: `wasi_experimental_http::req` has not been defined
The workaround for this is to remove the default target in .cargo/config.toml and run cargo test — assuming this only tests logic that does not have anything to do with Wasm or Spin functionality.
Because in the default Rust template we have a build command that sets the target to wasm32-wasi, do we want to remove the default target in the Cargo configuration file so testing with cargo test works for simple unit tests?
The default Rust template for a Spin application sets the default build target in
.cargo/config.tomlaswasm32-wasi:This make sense in order to ensure
cargo buildcreates a module that Spin can run, but this means that a simple unit test that purely wants to test some logic in the handler cannot be run:cargo test, this fails because it would try to instantiate a Wasm binary and run the test:cargo wasi test, this fails because of host imports that are not available in Wasmtime directly (but are in Spin):The workaround for this is to remove the default target in
.cargo/config.tomland runcargo test— assuming this only tests logic that does not have anything to do with Wasm or Spin functionality.Because in the default Rust template we have a build command that sets the target to
wasm32-wasi, do we want to remove the default target in the Cargo configuration file so testing withcargo testworks for simple unit tests?