pusher-js
Version:
Pusher Channels JavaScript library for browsers, React Native, NodeJS and web workers
72 lines (59 loc) • 2.08 kB
JavaScript
var Timers = require('core/utils/timers');
var PeriodicTimer = Timers.PeriodicTimer;
describe("PeriodicTimer", function() {
var callback;
var timer;
beforeEach(function() {
jasmine.clock().install();
callback = jasmine.createSpy("callback");
timer = new PeriodicTimer(123, callback);
});
afterEach(function() {
timer.ensureAborted();
jasmine.clock().uninstall();
});
it("should keep executing the callback with the specified interval", function() {
expect(callback.calls.count()).toEqual(0);
jasmine.clock().tick(122);
expect(callback.calls.count()).toEqual(0);
jasmine.clock().tick(1);
expect(callback.calls.count()).toEqual(1);
expect(callback.calls.count()).toEqual(1);
jasmine.clock().tick(122);
expect(callback.calls.count()).toEqual(1);
jasmine.clock().tick(1);
expect(callback.calls.count()).toEqual(2);
});
describe("#isRunning", function() {
it("should return true before first execution", function() {
jasmine.clock().tick(122);
expect(timer.isRunning()).toBe(true);
});
it("should return true after execution", function() {
jasmine.clock().tick(123);
expect(timer.isRunning()).toBe(true);
});
it("should return false after aborting", function() {
timer.ensureAborted();
expect(timer.isRunning()).toBe(false);
});
});
describe("#ensureAborted", function() {
it("should abort the timer before execution", function() {
timer.ensureAborted();
jasmine.clock().tick(1000000);
expect(callback).not.toHaveBeenCalled();
});
it("should play nice after first execution", function() {
jasmine.clock().tick(1000);
timer.ensureAborted();
});
it("should stop callback from being called even if clearInterval is broken", function() {
// IE has some edge-case with clearInterval not working, let's simulate it
spyOn(global, "clearInterval");
timer.ensureAborted();
jasmine.clock().tick(1000);
expect(callback).not.toHaveBeenCalled();
});
});
});