Spec-Zone.ru › Sinon.JS 6
Эти документы взяты из более старой версии sinon. Вы хотите перейти к последним документам?

Заглушки таймеров

Заглушки таймеров — это синхронные реализации setTimeout и родственных функций, которые Sinon.JS может переопределять для глобальных функций, чтобы упростить тестирование кода, использующего их.

Заглушки таймеров предоставляют clock объект для управления временем, который также может использоваться для контроля Date объектов, созданных с помощью new Date(); или Date.now(); (если поддерживается браузером).

Для самостоятельного использования заглушек таймеров рекомендуется использовать пакет lolex. Он предоставляет тот же набор функций (Sinon использует его под капотом) и ранее был выделен из Sinon.JS.

{
    setUp: function () {
        this.clock = sinon.useFakeTimers();
    },

    tearDown: function () {
        this.clock.restore();
    },

    "test should animate element over 500ms" : function(){
        var el = jQuery("<div></div>");
        el.appendTo(document.body);

        el.animate({ height: "200px", width: "200px" });
        this.clock.tick(510);

        assertEquals("200px", el.css("height"));
        assertEquals("200px", el.css("width"));
    }
}

API заглушек таймеров

var clock = sinon.useFakeTimers();

Заставляет Sinon заменить глобальные setTimeout, clearTimeout, setInterval, clearInterval, setImmediate, clearImmediate, process.hrtime, performance.now (при наличии) и Date на пользовательскую реализацию, связанную с возвращаемым clock объектом.

Запускает таймер с начальной отметкой времени эпохи Unix (метка времени 0).

var clock = sinon.useFakeTimers(now);

Аналогично предыдущему, но вместо начала отсчета с метки времени 0, начать с предоставленной метки времени now.

С sinon@2.0.0

Также можно передать объект Date, и его getTime() будет использоваться в качестве начальной метки времени.

var clock = sinon.useFakeTimers(config);

Аналогично предыдущему, но позволяет дополнительные параметры настройки, некоторые из которых:

  • config.now - Число/Дата - устанавливает lolex с указанной меткой времени Unix (по умолчанию: 0)
  • config.toFake - Массив строк - массив с явными именами функций для замены. По умолчанию lolex автоматически заменяет все методы, *кроме* process.nextTick. Однако, вы все еще можете заменить nextTick явно, указав его в списке.
  • config.shouldAdvanceTime - Булево - указывает lolex увеличивать смоделированное время автоматически на основе сдвига реального системного времени (по умолчанию: false)

Пожалуйста, обратитесь к lolex.install документации для полного набора функций.

Важно: при заглушении nextTick, обычные вызовы process.nextTick() не будут выполняться автоматически, как в обычных циклах обработки событий. Вам необходимо будет вызвать либо clock.next(), clock.tick(), clock.runAll() или clock.runToLast() (см. пример ниже). Обратитесь к документации lolex для получения дополнительной информации.

Примеры

Устанавливает заглушки таймеров на 1 января 2017 года и заглушает только setTimeout и process.nextTick:

var clock = sinon.useFakeTimers({
                now: 1483228800000,
                toFake: ["setTimeout", "nextTick"]
            });

var called = false;

process.nextTick(function () {
    called = true;
});

clock.runAll(); //forces nextTick calls to flush synchronously
assert(called); //true

Установить на ту же дату, автоматически увеличивая виртуальное время (по умолчанию каждые 20ms), что заставит таймеры срабатывать автоматически без необходимости tick() таймера:

var clock = sinon.useFakeTimers({
                now: 1483228800000,
                shouldAdvanceTime: true
            });

setImmediate(function () {
    console.log('tick'); //will print after 20ms
});

setTimeout(function () {
    console.log('tock'); //will print after 20ms
}, 15);

setTimeout(function () {
    console.log('tack'); //will print after 40ms
}, 35);

Обратитесь к lolex.install документации для полного набора доступных функций и более подробных объяснений.

С sinon@3.0.0

var clock = sinon.useFakeTimers([now, ]prop1, prop2, ...) больше не поддерживается. Для определения методов для заглушения, используйте config.toFake.

clock.tick(time);

Передвинуть таймер вперёд на time миллисекунд.

Вызывает все таймеры, запланированные в указанном диапазоне времени. time может быть числом миллисекунд, на которое нужно продвинуть таймер, или удобочитаемой строкой. Допустимые форматы строк: "08" для восьми секунд, "01:00" для одной минуты и "02:34:10" для двух часов, 34 минут и 10 секунд.

Значение time может быть отрицательным, что вызывает изменение времени, но не вызывает никаких обратных вызовов.

clock.next();

Передвигает таймер до момента первого запланированного таймера, вызвав его.

clock.runAll();

Выполняет все ожидающие таймеры, пока не останется ни одного. Если новые таймеры будут добавлены во время выполнения, они также будут запущены.

Это облегчает запуск асинхронных тестов до завершения, не беспокоясь о количестве таймеров или задержках в этих таймерах.

clock.restore();

Восстановить заглушенные методы.

Вызов, например, tearDown.

© 2010–2018 Christian Johansen
Licensed under the BSD License.
https://sinonjs.org/releases/v6.3.5/fake-timers

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API