捕获MochaJS超时

时间:2015-05-29 08:27:44

标签: mocha

这个问题has been asked before,但给出的答案是重新编写在这种情况下使用的特定代码。

Mocha documentation仅提及更改超时的持续时间,而不是超时时的行为。

my 的情况下,我想测试在某些条件下没有任何副作用的代码。显而易见的方法是调用代码,等待Mocha超时,然后对我的间谍运行一些断言,例如:

this.onTimeout(function() {
    assert.equal(someObject.spiedMethod.called, false);
});

someAsyncFunction();

这是可能的,还是我必须设置自己的超时,例如:

// 1. Disable the mocha timeout
this.timeout(0);

// 2. create my own timeout, which should fire before the mocha timeout
setTimeout(function() {
    assert.equal(someObject.spiedMethod.called, false);
    done();
}, 2000);

someAsyncFunction();

2 个答案:

答案 0 :(得分:1)

摩卡自己的超时仅用于检测何时测试被认为是超出任何合理的速度。异步计算可能会以导致它永远不会终止的方式出错。而不是永远等待,Mocha让你决定在X时间后它应该通过测试失败。一旦达到超时,Mocha就会放弃超时的测试。

所以你必须设定自己的超时时间。

答案 1 :(得分:0)

面临类似的问题&也没有找到办法在mochajs做到这一点。

但是,如果你想在测试超时时运行一些代码,你可以像这样构建你的代码:

describe('something', function() {
  const TEST_TIMEOUT = 10000
  this.timeout(TEST_TIMEOUT)
  beforeEach('set timeout callback', function() {
    setTimeout(function() {console.log('hi')}, TEST_TIMEOUT)
  })
})

一些警告:

1-我不确定它是否会影响测试的结果。但是如果是这样的话,我会setTimeoutTEST_TIMEOUT减去一些时间来确保我的断言在mochajs超时之前运行。

2-相反,如果回调的目标不是做一些断言而是运行一些代码(例如,清理或记录),我会将超时设置为TEST_TIMEOUT 加上一段时间 从mocha v4(或以前版本中带有--no-exit标志)开始,只要你有超时(或其他处理程序/进程没有终止),mocha就不会像以前那样强制退出,所以你可以很舒服你的代码将运行。