mocha:如何在使用setTimeout时减少打印时间

时间:2016-10-16 22:39:13

标签: javascript node.js asynchronous mocha

我使用mocha --slow 0 ./test/test.js运行mocha来显示完成调用所需的时间。我正在编写一个与其他服务非常异步的库,并且响应时间非常重要。但是我的库中的一些调用导致另一个服务执行慢操作,如启动停止删除更多时间完成然后存在于两个之间连续测试。结果是 remove 测试的打印时间显示为比完成调用所需的实际时间更长。

describe(`stopContainer ${test_name} t:0`, () => {
  it(`should stop the container named ${test_name}`, () => {
    return engine.stopContainer(test_name, {t:0}).should.be.fulfilled
  })
})

// this shows to be much longer than the actual call takes
describe(`removeContainer ${test_name} v:1 `, () => {
  it(`should remove the container named ${test_name} & volumes`, function(done) {
    // needs to wait a second because of engine latency
    this.timeout(5000)
    setTimeout(() => {
      engine.removeContainer(test_name, {v:1}).should.be.fulfilled.and.notify(done);
    }, 1000)
  })
})

打印以下内容

  stopContainer dap_test_container t:0
    ✓ should stop the container named dap_test_container (285ms)
  removeContainer dap_test_container v:1
    ✓ should remove the container named dap_test_container & volumes (1405ms)

显然,最后的测试耗时少了1000毫秒。但是我必须在整个地方进行数百次测试,所以报告的值变得更加无意义,因为我无法跟踪哪些是延迟的,哪些不是。

注意我不是故意将其用作分析我的代码的方法,这只是为了让我的测试结果更有意义。

我想减少打印时间,有没有办法用摩卡手动减少打印时间?或者摩卡是否为这样做提供了更好的结构?

1 个答案:

答案 0 :(得分:0)

这很简单,延迟beforeafter

我做了一个全球叫做等待

global.wait = wait = function(ms) {
  return new Promise(resolve => {
    setTimeout(resolve, ms)
  })
}

并在测试中使用它

describe(`removeContainer ${test_name} v:1 `, () => {

  before('wait for latency', () => wait(1000))

  it(`should remove the container named ${test_name} & volumes`, () => {
    return engine.removeContainer(test_name, {v:1}).should.be.fulfilled;
  })
})