Posted about 7 years ago. Visible to the public. Linked content.
Testing setTimeout and setInterval with Jasmine
Jasmine has a
jasmine.clock()
helper
Archive
that you can use to travel through time and trigger setTimeout
and setInterval
callbacks:
CopybeforeEach(function() { timerCallback = jasmine.createSpy("timerCallback"); jasmine.clock().install(); }); afterEach(function() { jasmine.clock().uninstall(); }); it("causes a timeout to be called", function() { setTimeout(function() { timerCallback(); }, 100); expect(timerCallback).not.toHaveBeenCalled(); jasmine.clock().tick(101); expect(timerCallback).toHaveBeenCalled(); });
If you actually want the test to wait out the timer, your example function needs to accept a done
argument, which you then call when the test is expected to finish:
Copyit("causes a timeout to be called", function(done) { setTimeout(function() { timerCallback(); }, 100); setTimeout(function() { expect(timerCallback).toHaveBeenCalled(); done(); }, 101); });
Needless to say the second test is much slower than the first test.
Your development team has a full backlog of feature requests, chores and refactoring coupled with deadlines? We are familiar with that. With our "DevOps as a Service" offering, we support developer teams with infrastructure and operations expertise.