簡體   English   中英

摩卡超時后承諾解決

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM