vite-plugin-wasm-pack icon indicating copy to clipboard operation
vite-plugin-wasm-pack copied to clipboard

testing a wasm lib in vitest

Open bartektelec opened this issue 11 months ago • 0 comments

I have been struggling to test components that use my Rust wasm-pack generated code. I narrowed down the problem to the invokation of wasm-pack's await init(). It looks like vitest freezes there and can't proceed so I can't finish my tests.

I have tried replacing it with initSync() and running the init fn from the setupTests.ts file so it initializes before the test suite runs but no luck.

Running the async init function imported from my-wasm-lib/pkg throws a ReferenceError: self is not defined. I tried mocking the self namespace with

globalThis.self = globalThis;

in my setupTests file and then I'd get a TypeError: Invalid URL

I wonder if it's possible at all to run the WASM thread in Vitest or am I doing something wrong. Using the regular vite server with the wasm lib works just fine in the browser enviroment.

My vite config:

  plugins: [svelte({ hot: !process.env.VITEST }), wasmPack('./wasm-lib')],
  server: {
    port: 5000,
    strictPort: true,
    open: false
  },
  test: {
    setupFiles: ['./setupTests.ts'],
    globals: true,
    include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
  }

Deps:

vite: 4.0.5,
vitest: 0.31.1,
vite-plugin-wasm-pack: 0.1.12

I build my wasm package using wasm-pack build ./my-wasm-lib --target web Tests are also declared with @vitest-environment jsdom

Any ideas?

bartektelec avatar Jul 18 '23 09:07 bartektelec