Ryan
Ryan

Reputation: 1940

How can I increase the test time out value in jest?

I want to verify a function that can get update after one minute, and I set some sleep in my code, but my default time out value is 15000 ms, my code has sleep 60000ms so it returns this error:

thrown: "Exceeded timeout of 15000 ms for a test.
    Use jest.setTimeout(newTimeout) to increase the timeout value,
    if this is a long-running test."

my code is here:

it('shows that timeline can get updated after one minute', async () => {
    await selectTimeForTimeLine.selectTime('Last 5 minutes');
    await page.waitForTimeout(3000);
    const defaultTime = await alarmTimeLine.xAxisValues();
    await page.evaluate(() => {
      return new Promise((resolve) => setTimeout(resolve, 60000));
    });
    const correntTime = await alarmTimeLine.xAxisValues();
    expect(defaultTime).not.toEqual(correntTime);
  });

Where should I put jest.setTimeOut()? I want to increase exceeded timeout value to 70000ms to make sure my code runs well.

Upvotes: 60

Views: 96654

Answers (4)

mikemaccana
mikemaccana

Reputation: 123148

The jest docs used to be a little confusing, so I had them updated.

Setting test timeouts for the entire file

From the jest.setTimeout() docs:

Set the default timeout interval for tests and before/after hooks in milliseconds. This only affects the test file from which this function is called.

Ie jest.setTimeout() is handled on a file level. Their example doesn't make it clear, but you should have run jest.setTimeout() at the top of your test file:

const SECONDS = 1000;
jest.setTimeout(70 * SECONDS)

describe(`something`, () => {
  it('works', async () => {
    asset(true).isTruthy()
  });
})

Update: I've now sent a PR to the Jest team, which has been accepted, to clarify the docs. They now read:

To set timeout intervals on different tests in the same file, use the timeout option on each individual test.

This is part of Jest 29.5 and newer.

Setting a test timeout for a specific slow test

This is probably what you want. To use the timeout option on each individual test:

// Just to increase readability
const SECONDS = 1000;

describe(`something`, () => {
  it('works', async () => {
    asset(true).isTruthy()
  }, 3 * SECONDS);
})

Upvotes: 28

Ryan
Ryan

Reputation: 1940

To set a timeout on a single test, pass a third option to it/test, for example:

 const SECONDS = 1000;

 it('does expected thing', async () => {
   ...
 }, 70 * SECONDS);

The value is in milliseconds. In this example 70 seconds.

Upvotes: 122

john k
john k

Reputation: 6615

jest also has a config file.

// jest.config.js
module.exports = {
    // ...
    testTimeout: 20000
}

Upvotes: 2

LeOn - Han Li
LeOn - Han Li

Reputation: 10174

After upgrading to v28+, this jest.setTimeout() does not work for me anymore. I have to set the timeout explicitly in ./jest.config.js:

// jest.config.js
module.exports = {
    // ...
    testTimeout: 70000
}

Upvotes: 15

Related Questions