我有一个Mocha测试套件,间歇性地失败,并显示以下消息:
1) "before all" hook
0 passing (2s)
1 failing
1) "before all" hook:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
精简的代码如下:
const rewiremock = require("rewiremock").default;
const sinon = require("sinon");
// Some more imports
let readFileSync;
let serverConfiguration;
let testingModule;
before(
function ()
{
// Some mocking of the form:
rewiremock(
"fs"
).by(
(
mock
) =>
{
const realFs = mock.requireActual("fs");
readFileSync = sinon.spy(realFs, "readFileSync");
return realFs;
}
);
const originalModule = require("./path/to/my/mod");
const fakeModule = {
myMethod() {
// Some behaviour-altering code and then:
originalModule.myMethod();
}
};
testingModule = rewiremock.proxy(
"./path/to/testing/module",
{
"./path/to/my/mod" : fakeHttpUiServerFactory
}
);
console.log("one");
// Some more mocking
console.log("two");
// Aaaand more mocking
console.log("three");
// Initialization of a configuration object
serverConfiguration = {
"nothing" : "special here"
};
console.log("four");
}
);
挂钩是同步的;它没有done
参数(如图所示),代码也不返回任何内容。我添加了一些日志,以尝试查看该功能在超时之前在哪里停止,但是每条日志都会被打印出来。似乎可以很好地执行该功能,但是随后它停止了足够长的时间,以至于发生超时。
还有什么我可以尝试添加的方法来帮助解决此问题?同样,这是间歇性发生的,因此,除了“我运行此代码”之外,很难给出适当的再现步骤。如果完整的代码版本有帮助,我可以提供它(有点,它是专有的,因此您会看到很多myThis
和myThat
,但是结构本身将保持不变)。
答案 0 :(得分:0)
在before函数中,您可以设置 this.timeout = xxxx 并增加时间。我通常将其设置为10000。可能会有更好的解决方案,但这就是我为我解决此问题的方式。