这个问题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();
答案 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-我不确定它是否会影响测试的结果。但是如果是这样的话,我会setTimeout
加TEST_TIMEOUT
减去一些时间来确保我的断言在mochajs超时之前运行。
2-相反,如果回调的目标不是做一些断言而是运行一些代码(例如,清理或记录),我会将超时设置为TEST_TIMEOUT
加上一段时间
从mocha v4(或以前版本中带有--no-exit
标志)开始,只要你有超时(或其他处理程序/进程没有终止),mocha就不会像以前那样强制退出,所以你可以很舒服你的代码将运行。