Jasmine has a
jasmine.clock()
helper
Show archive.org snapshot
that you can use to travel through time and trigger setTimeout
and setInterval
callbacks:
beforeEach(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:
it("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.
Posted by Henning Koch to makandra dev (2015-04-29 14:04)