[英]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.