Подтвердить что ты не робот

Как смоделировать время прохождения тестов Mocha, чтобы вызываемые вызовы setTimeout вызывались?

Мне нужно протестировать JavaScript-код, который полагается setTimeout для выполнения периодических задач. Как я могу из моих тестов Mocha имитировать прошедшее время, чтобы вызываемые вызовы setTimeout вызывались?

В основном я запрашиваю функциональность, похожую на Jasmine Mock Clock, которая позволяет вам увеличить время JavaScript на несколько тиков.

4b9b3361

Ответ 1

Я узнал, что Sinon.JS поддерживает манипулирование часами JavaScript через synon.useFakeTimers, как описано в документации Fake Timers. Это прекрасно, поскольку я уже использую Sinon для издевательских целей, и я предполагаю, что имеет смысл, что Mocha сам по себе не поддерживает это, поскольку он больше в области насмешливой библиотеки.

Здесь пример использования Mocha/Chai/Sinon:

var clock;
beforeEach(function () {
     clock = sinon.useFakeTimers();
 });

afterEach(function () {
    clock.restore();
});

it("should time out after 500 ms", function() {
    var timedOut = false;
    setTimeout(function () {
        timedOut = true;
    }, 500);

    timedOut.should.be.false;
    clock.tick(510);
    timedOut.should.be.true;
});