我有一个我正在测试Mocha的工作者,但即使我从承诺解析中得到了正确的响应,Mocha仍然因为超时而未能通过测试 . 关键的事实是它在摩卡超时后解决了 .
import chai, { expect } from 'chai';
// Needed otherwise Worker is undefined in the test environment
const Worker = require('webworker-threads').Worker;
describe('WebWorker', () => {
it('should return correctly', () => {
return new Promise(res => {
const dummyWorker = new Worker('./public/js/worker.bundle.js');
dummyWorker.onmessage = e => {
console.log('test message'); // 'test message' prints to testing log
res(e.data);
};
dummyWorker.postMessage(['foo', 'bar']);
})
.then(workerData => {
console.log(workerData[0]); // 'foo' prints to testing log
expect(workerData[0]).to.equal('foo');
})
.catch(err => console.error(err));
});
});
错误:超出2000ms的超时 . 对于异步测试和钩子,确保调用“done()”;如果返回Promise,请确保它已解决 .
我已经尝试了使用 done()
的每一些排列,使用 before()
钩子,使用chai-as-promised,使用promises和Mocha完成,使用 this.timeout(5000)
来增加超时,然后开启,但似乎没有任何效果 .
1 回答
我已经将问题缩小到npm包webworker-threads . 你知道什么它实际上是一个尚未解决的issue .
当涉及承诺时,这只是一个问题 . 我以为我尝试在
dummyWorker.onmessage
中使用done()
,但我遗憾地错了 . 使用done()
与webworker-threads工作得很好 . 但是,使用done()
的问题是任何断言错误只返回超时消息 . 使用promises,错误消息更加具体 .因此,我已经切换到使用不同的Web工作包 - 小工作者,现在它工作得很好 .
如果您想查看webworker-threads的问题,请参阅下面的简单示例,该示例在不需要外部文件的情况下重现错误: