在单元测试功能中运行wasm代码时,出现此错误:
CompileError: AsyncCompile: Wasm decoding failed: expected magic word 00 61 73 6d, found 3c 21 44 4f @+0
尽管我已经成功地将已编译的wasm文件添加到目录中,并且主要部分是代码在浏览器中运行,但没有在测试中运行。
测试正在使用磁带运行并已浏览器化。
const imports = {
env:{
// paceOp: require('pace').op,
consoleLog:console.log,
perform: function(x,y){
let pixel = options.changePixel(
pixels.get(x, y, 0),
pixels.get(x, y, 1),
pixels.get(x, y, 2),
pixels.get(x, y, 3),
x,
y
);
pixels.set(x, y, 0, pixel[0]);
pixels.set(x, y, 1, pixel[1]);
pixels.set(x, y, 2, pixel[2]);
pixels.set(x, y, 3, pixel[3]);
}
}
};
const inBrowser = (options.inBrowser)?1:0;
const test = (process.env.TEST)?1:0;
fetch('./test.wasm').then(response =>
response.arrayBuffer()
).then(bytes =>
WebAssembly.instantiate(bytes, imports)
).then(results => {
results.instance.exports.manipulatePixel(pixels.shape[0],pixels.shape[1],inBrowser, test);
extraOperation();
}).catch(err=>{
console.log(err)
});
有人可以帮我吗!! 在此先感谢。
答案 0 :(得分:0)
传递给fetch()
的参数是错误的。
看看您的提取响应值。我想您会发现,当您请求fetch('./test.wasm')
时,无论使用哪种Web服务器都将返回一个文档(也许是404)。
我无法说出您的wasm
文件相对于此脚本的位置,但是从您对'./'
的使用来看,也许您的预期用途是:fetch('test.wasm')
?< / p>
您还可以通过重写以下几行来理解我的意思:
fetch('./test.wasm').then(response) {
console.log("Note the response text value: " + response);
var ab = response.arrayBuffer();
return ab;
})
如果您将正确的路径传递到fetch
,则此代码的其余部分可能会正常运行。