私はMochaでテストしていますが、私は約束の解像度から適切な応答を得ていますが、Mochaはタイムアウトによりテストに失敗します。重要な事実は、モカがタイムアウトした後に解決するということです。私は、done()
を使用してbefore()
フックを使用して、チャイ-約束通りを-使用して、約束を使用してモカの完了、タイムアウトを増やすことthis.timeout(5000)
を使用して、とのあらゆるいくつかの順列を試してみた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));
});
});
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
としかし、何も動作していないようです。
あなたはモカのタイムアウトを拡張する必要があります。 'it' arrow関数を通常の関数として書き直し、' this.timeout(5000) 'の最初の行に追加してください。これにより、モカは少なくとも5秒待ってから不平を言うでしょう。 – MarcoL
@MarcoLご意見ありがとうございました。私も実際にそれを試しましたが、試したことのリストにそれを含めるのを忘れてしまっていました。私は今リストを更新します。 – mythereal
あなたはプロミスを返すので、モカはそれが解決するのを正しく待つべきです。これは、 'dummyWorker.onmessage(...)'が決して呼び出されないことを強く示唆しています。 '。/ public/js/worker.bundle.js'がやっていることを投稿できますか? –