我有一个像这样的 Rust + wasm 项目:
wasm-pack-example/
pkg/
.gitignore
package.json
wasm_pack_example.d.ts
wasm_pack_example.js
wasm_pack_example_bg.d.ts
wasm_pack_example_bg.js
wasm_pack_example_bg.wasm
src/
lib.rs
Cargo.toml
Run Code Online (Sandbox Code Playgroud)
pkg
当我运行时,会构建wasm-pack build
.
发出的 js 文件不是公共 rust 函数的简单传递 - wasm-pack 向它们添加了一些逻辑。它看起来很像公共 Rust 函数的内存管理包装器。
在我的项目中,我现在真正想做的是针对发出的 wasm 的 js 接口编写自动化测试。这就是我的应用程序所做的,这就是我需要测试的。我很高兴使用任何测试框架(我已经用玩笑做了很多这样的实验)。
我已经尝试了许多指南和工具来做到这一点,包括https://github.com/DrSensor/rs-jest,它很有前途,但缺乏测试 wasm-pack 生成的特定 js 接口的能力。另外,它似乎缺少我的特定库所需的东西,也许是我使用 wasm_bindgen 的特定方式。当根据 rs-jest 实例化 WebAssembly 时,我会看到TypeError: WebAssembly.instantiate(): Imports argument must be present and must be an object
,如果我将一个空对象传递给实例化,我会看到TypeError: WebAssembly.instantiate(): Import #0 module="__wbindgen_placeholder__" error: module is not an object or function
。
我还尝试了一段时间来模拟浏览器使用 JsDom 获取和实例化 …