У меня есть набор тестов 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
, но сама структура останется прежней).