Jest Mock Timers

Matthew Garcia

One of the biggest hurdles to testing timeouts is waiting for them to time out. Jest provides a way around this.

runAllTimers

Letโ€™s say youโ€™re testing a program that emits an event after some time, but you donโ€™t want to wait however long for that event to actually be emitted. Jest gives you the option of instantly running callbacks set with setTimeout through the jest.runAllTimers function.

// This has to be called before using fake timers.
jest.useFakeTimers();

it('closes some time after being opened.', (done) => {
  // An automatic door that fires a `closed` event.
  const autoDoor = new AutoDoor();
  autoDoor.on('closed', done);
  autoDoor.open();
  // Runs all pending timers. whether it's a second from now or a year.
  jest.runAllTimers();
});

runTimersToTime

But what if you donโ€™t want to run all timers? What if you only want to simulate some time passing? runTimersToTime is here for you.

jest.useFakeTimers();

it('announces it will close before closing.', (done) => {
  const autoDoor = new AutoDoor();
  // The test passes if there's a `closing` event.
  autoDoor.on('closing', done);
  // The test fails if there's a `closed` event.
  autoDoor.on('closed', done.fail);
  autoDoor.open();
  // Only move ahead enough time so that it starts closing, but not enough that it is closed.
  jest.runTimersToTime(autoDoor.TIME_BEFORE_CLOSING);
});
  Tweet It

๐Ÿ•ต Search Results

๐Ÿ”Ž Searching...

Sponsored by #native_company# โ€” Learn More
#native_title# #native_desc#
#native_cta#