Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jest setTimeout not pausing test

it('has working hooks', async () => {
  setTimeout(() => {
    console.log("Why don't I run?")
    expect(true).toBe(true)
  }, 15000)

I've already reviewed this answer, Jest documentation, and several GitHub threads:

Disable Jest setTimeout mock

Right now, the function inside the timeout doesn't run. How can I get Jest to pause its execution of the test for 15 seconds and then run the inner function?

Thanks!

like image 751
Nick Avatar asked Sep 06 '17 13:09

Nick


Video Answer


2 Answers

it('has working hooks', async () => {
  await new Promise(res => setTimeout(() => {
    console.log("Why don't I run?")
    expect(true).toBe(true)
    res()
  }, 15000))
})

or

it('has working hooks', done => {
  setTimeout(() => {
    console.log("Why don't I run?")
    expect(true).toBe(true)
    done()
  }, 15000)
})
like image 92
Ron Avatar answered Oct 02 '22 20:10

Ron


A nice and clean way to do it (without callbacks) we can simply run an await and pass the res to setTimeout(res, XXX) like so:

it('works with await Promise and setTimeout', async () => {
  // await 15000ms before continuing further
  await new Promise(res => setTimeout(res, 15000));

  // run your test
  expect(true).toBe(true)
});
like image 32
Mark Pieszak - Trilon.io Avatar answered Oct 02 '22 20:10

Mark Pieszak - Trilon.io