Mocha 测试假断言超时

Mocha test false assert timeouts

我的异步 mocha 测试有问题。当输入评估为 false 时,promise 中的 assert 方法会导致超时。 (使用真实值它工作正常)

这是问题的简化版本。我们通常做网络而不是这个构造的承诺。

describe('test',  () => {

    it('testcase', (done) => {

        new Promise(async (res) => {

            console.log("before");
            assert(false);
            console.log("after");

            res(null);
        }).then(() => done()).catch(() => done());

    });
});
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

您最好不要 在 promise 构造函数上使用 async/await 语法。这是一个反模式。

assert(false)会抛出一个错误,但是这个错误不会被.catch()方法捕获。有关详细信息,请参阅

因此您应该从 promise 构造函数中删除 async。然后,assert(false)抛出的错误将被捕获。

例如

import { assert } from 'chai';

describe('test', () => {
  it('testcase', (done) => {
    new Promise((res) => {
      console.log('before');
      assert(false);
      console.log('after');

      res(null);
    })
      .then(() => done())
      .catch((err) => done(err));
  });

  it('testcase - 2', (done) => {
    new Promise((res) => {
      console.log('before');
      assert(true);
      console.log('after');

      res(null);
    })
      .then(() => done())
      .catch((err) => done(err));
  });
});

测试结果:

  test
before
    1) testcase
before
after
    ✓ testcase - 2


  1 passing (9ms)
  1 failing

  1) test
       testcase:
     AssertionError: Unspecified AssertionError
      at /Users/dulin/workspace/github.com/mrdulin/expressjs-research/src/Whosebug/66461468/index.test.ts:7:7
      at new Promise (<anonymous>)
      at Context.<anonymous> (src/Whosebug/66461468/index.test.ts:5:5)
      at processImmediate (internal/timers.js:439:21)



npm ERR! Test failed.  See above for more details.