我在用木偶师和小丑做一些前端测试。

我的测试如下:

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

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

Timeout -在jest.setTimeout指定的5000毫秒超时时间内没有调用异步回调。 在node_modules/jest-jasmine2/build/queue_runner.js:68:21 <br/> 在超时。callback [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:633:19)

这很奇怪,因为:

我将超时时间指定为30000 我是否得到这个错误似乎是随机的

为什么会这样?


当前回答

如果有人不解决这个问题,请使用上述方法。我通过用箭头函数包围async func来修正我的错误。如:

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

其他回答

确保调用done();在回调中,或者它不能通过测试。

beforeAll((done /* Call it or remove it */ ) => {
  done(); // Calling it
});

它适用于所有具有done()回调的其他函数。

我最近因为不同的原因遇到了这个问题:我正在使用jest -i同步运行一些测试,它会超时。无论出于何种原因,使用jest——runInBand(即使-i是一个别名)运行相同的测试都不会超时。

当网络很慢或使用await进行许多网络调用时,就会出现超时问题。这些场景超过了缺省超时时间,即5000毫秒。要避免超时错误,只需增加支持超时的全局变量的超时。全局变量及其签名的列表可以在这里找到。

对于 是 24.9

对于Jest 24.9+,您还可以通过添加——testTimeout从命令行设置超时。

以下是其文档节选:

——testTimeout = <数字> 测试的默认超时(以毫秒为单位)。缺省值:5000。

这是一个相对较新的更新,但它更直接。如果你使用的是Jest 24.9.0或更高版本,你可以在配置中添加testTimeout:

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