[英]Promise resolves after Mocha times out
我有一个正在与Mocha进行测试的工作人员,但是即使我从诺言解决方案中获得了正确的响应,但由于超时,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));
});
});
错误:超时超过2000毫秒。 对于异步测试和挂钩,请确保调用了“ done()”; 如果返回承诺,请确保其解决。
我试着使用一些每次置换done()
使用before()
挂钩,用柴作为许诺的,使用的承诺和摩卡的完成,使用this.timeout(5000)
以增加超时,和和,但似乎没有任何工作。
我已将问题缩小到npm软件包webworker-threads。 而且你知道什么。 它实际上是一个问题,即尚未解决。
当涉及承诺时,这只是一个问题。 我以为我尝试在dummyWorker.onmessage
内部使用done()
,但我被误认为是错误的。 与webworker-threads一起使用done()
可以正常工作。 但是,使用done()
的问题在于,任何断言错误只会返回超时消息。 有了promise,错误消息就会更加具体。
因此,我改用了另一个Web工作程序包-tiny-worker,它现在可以正常工作了。
如果您想查看Webworker线程的问题,请参考下面的简单示例,该示例无需外部文件即可重现错误:
import { expect } from 'chai';
const Worker = require('webworker-threads').Worker;
describe('web worker', () => {
it('should resolve', () => {
const p = new Promise(resolve => {
const dummyWorker = new Worker(function () {
this.onmessage = e => {
self.postMessage('foo');
};
});
dummyWorker.onmessage = e => {
resolve(e.data);
};
dummyWorker.postMessage('foo');
});
return p.then(data => {
console.log(data));
expect(data).to.equal('bar');
}
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.