Мокко синхронный "прежде всего" время ожидания крючка - PullRequest
0 голосов
/ 18 января 2019

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

1 Ответ

0 голосов
/ 18 января 2019

Внутри функции before вы можете установить this.timeout = xxxx и увеличить время.Я обычно устанавливаю его на 10000. Возможно, есть лучшее решение, но именно так я могу решить эту проблему для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...