处理 mochajs 超时的更好方法

Better way to handle mochajs timeout

我正在尝试实施 mocha 测试,但它似乎没有按我预期的方式工作。我的代码如下所示:

async function getFoo() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved')
    }, 2500)
  })
}

describe(`Testing stuff`, function () {
  it('resolves with foo', () => {
    return getFoo().then(result => {
      assert.equal(result, 'foo')
    })
  })
})

错误信息:

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

对我来说,我似乎必须增加超时阈值。 有一个更好的方法吗?因为我不知道每次测试可能需要多长时间。我正在测试 nodejs 子进程

此致

如错误中所述,您需要使用 done() 结束测试。

function delay(timeout = 2500) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved')
    }, timeout)
  })
}

describe(`Testing stuff`, function (done) {
  it('resolves with foo', (done) => {
    return delay().then(result => {
      assert.equal(result, 'foo') 
      done()
    })
  })
});

// better readability

describe(`Testing stuff`, function (done) {
  it('resolves with foo', (done) => {
    const result = await delay();
    assert.equal(result, 'foo') 
    done();
  })
});

但是正如您所描述的,您正在测试 child_processes 我不推荐这样做。因为要测试 child_process 你需要 promisify child_process 这没有意义。在这里查看更多信息

如果你真的想测试 child_process 也许你可以用我给的 link 模拟这个过程,但仅用于测试目的。