消息“在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调”

我正在使用Puppeteer和Jest来运行一些前端测试。

我的测试如下所示:

describe("Profile Tab Exists and Clickable: /settings/user", () => {
    test(`Assert that you can click the profile tab`, async () => {
      await page.waitForSelector(PROFILE.TAB);
      await page.click(PROFILE.TAB);
    }, 30000);
});

有时,当我运行测试时,一切都按预期工作。其他时候,我收到一个错误:

超时 - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调。

     at node_modules/jest-jasmine2/build/queue_runner.js:68:21 <br/>
     at Timeout.callback [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:633:19)

这很奇怪,因为:

  1. 我指定超时为30000

  2. 我是否得到这个错误似乎非常随机

为什么会发生这种情况?


答案 1

此处指定的超时需要短于默认超时。

缺省超时为,并且框架缺省情况下为 。您可以通过添加5000jasminejest

jest.setTimeout(30000);

但这是特定于测试的。或者,您可以为框架设置配置文件。

配置 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)

另请参阅以下主题:

设置每个测试的超时 #5055

制作茉莉花。DEFAULT_TIMEOUT_INTERVAL可配置 #652

P.S.:拼写错误(即)也会抛出相同的错误。setupFilesAfterEnvsetupFileAfterEnv


答案 2

它应该调用 当它从测试异步时。async/await

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);
});