Message "Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout"
The timeout you specify here needs to be shorter than the default timeout.
The default timeout is 5000
and the framework by default is jasmine
in case of jest
. You can specify the timeout inside the test by adding
jest.setTimeout(30000);
But this would be specific to the test. Or you can set up the configuration file for the framework.
Configuring Jest
// jest.config.js
module.exports = {
// setupTestFrameworkScriptFile has been deprecated in
// favor of setupFilesAfterEnv in jest 24
setupFilesAfterEnv: ['./jest.setup.js']
}
// jest.setup.js
jest.setTimeout(30000)
See also these threads:
setTimeout per test #5055
Make jasmine.DEFAULT_TIMEOUT_INTERVAL configurable #652
P.S.: The misspelling setupFilesAfterEnv
(i.e. setupFileAfterEnv
) will also throw the same error.
It should call the async/await
when it is async from test.
describe("Profile Tab Exists and Clickable: /settings/user", () => {
test(`Assert that you can click the profile tab`, async (done) => {
await page.waitForSelector(PROFILE.TAB);
await page.click(PROFILE.TAB);
done();
}, 30000);
});
The answer to this question has changed as Jest has evolved. Current answer (March 2019):
-
You can override the timeout of any individual test by adding a third parameter to the
it
. I.e.,it('runs slow', () => {...}, 9999)
-
You can change the default using
jest.setTimeout
. To do this:// Configuration "setupFilesAfterEnv": [ // NOT setupFiles "./src/jest/defaultTimeout.js" ],
and
// File: src/jest/defaultTimeout.js /* Global jest */ jest.setTimeout(1000)
-
Like others have noted, and not directly related to this,
done
is not necessary with the async/await approach.
This is a relatively new update, but it is much more straight forward. If you are using Jest 24.9.0 or higher you can just add testTimeout
to your config:
// in jest.config.js
module.exports = {
testTimeout: 30000
}