Skip to content

Tests cannot run when using bindings to NPM dependencies #2477

Open
@jpgneves

Description

@jpgneves

Describe the Bug

Given a crate A with a package.json next to Cargo.toml containing NPM package dependencies, running cargo test --target wasm32-unknown-unknown (or wasm-pack test) will fail as the required dependencies are not present to be loaded.

It feels like wasm-bindgen needs to invoke npm install to install the dependencies in the temporary test directory to install the dependencies prior to running the tests?

Steps to Reproduce

  1. Set up a crate which creates bindings to a NPM module via #[wasm_bindgen(module = ...)]
  2. Add tests using #[wasm_bindgen_test] which make use of the bindings
  3. Run cargo test --target wasm32-unknown-unknown or wasm-pack test

Minimal example using bindings to React: https://github.com/jpgneves/wbg-test

Expected Behavior

Tests run successfully.

Actual Behavior

The following error is given (for the example linked above):

     Running target/wasm32-unknown-unknown/debug/deps/node-f2b1b07656587b53.wasm
Set timeout to 20 seconds...
internal/modules/cjs/loader.js:818                
  throw err;
  ^

Error: Cannot find module 'react'
Require stack:
- /home/joao/proj/wbg-test/target/wasm32-unknown-unknown/wbg-tmp/wasm-bindgen-test.js
- /home/joao/proj/wbg-test/target/wasm32-unknown-unknown/wbg-tmp/run.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)
    at Function.Module._load (internal/modules/cjs/loader.js:667:27)
    at Module.require (internal/modules/cjs/loader.js:887:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/home/joao/proj/wbg-test/target/wasm32-unknown-unknown/wbg-tmp/wasm-bindgen-test.js:4:23)
    at Module._compile (internal/modules/cjs/loader.js:999:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Module.require (internal/modules/cjs/loader.js:887:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/home/joao/proj/wbg-test/target/wasm32-unknown-unknown/wbg-tmp/wasm-bindgen-test.js',
    '/home/joao/proj/wbg-test/target/wasm32-unknown-unknown/wbg-tmp/run.js'
  ]
}
error: test failed, to rerun pass '--test node'
Error: Running Wasm tests with wasm-bindgen-test failed
Caused by: failed to execute `cargo test`: exited with exit code: 1
  full command: "cargo" "test" "--target" "wasm32-unknown-unknown"

The contents of target/wasm32-unknown-unknown/wbg-tmp:

package.json
run.js
wasm-bindgen-test_bg.wasm 
wasm-bindgen-test.js

Where package.json contains the declared dependencies:

{
  "react": "^17.0.1"
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions