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

我的测试如下:

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 我是否得到这个错误似乎是随机的

为什么会这样?


当前回答

对于Jest 24.9+,我们只需要在命令行中添加——testTimeout:

--testTimeout= 10000 // Timeout of 10 seconds

缺省超时值为5000 (5000 ms - 5秒)。这将适用于所有测试用例。

或者如果您只想给特定的函数超时,那么您可以在声明测试用例时使用此语法。

test(name, fn, timeout)

例子

test('example', async () => {

}, 10000); // Timeout of 10 seconds (default is 5000 ms)

其他回答

对于大于27的笑话版本,您可以在规范文件的顶部添加useRealTimers。

下面是代码片段

import { shortProcess, longProcess } from '../../src/index';

jest.useRealTimers();

describe(`something`, function () {
    it('should finish fine', async function () {
        await shortProcess();
        expect(1).toBe(1);
    });

    it('should fail with a timeout', async function () {
        await longProcess();
        expect(1).toBe(1);
    });

    it('should finish fine again', async function () {
        jest.setTimeout(10 * 1000);
        await longProcess();
        expect(1).toBe(1);
    }, 10000);
});

在笑话仓库这里找到github问题。

我想补充(这是一个有点长的评论),即使超时3000,我的测试有时仍然会(随机)失败

Timeout -在jest.setTimeout指定的5000ms超时内没有调用异步回调。

感谢Tarun的精彩回答,我认为修复大量测试的最短方法是:

describe('Puppeteer tests', () => {
  beforeEach(() => {
    jest.setTimeout(10000);
  });

  test('Best Jest test fest', async () => {
    // Blah
  });
});

2022年3月14日,Jest 27.5文档表明了一个新流程:

https://jestjs.io/docs/api#beforeallfn-timeout

在超时前传递第二个参数测试msec的个数。作品!

test('adds 1 + 2 to equal 3', () => {
    expect(3).toBe(3);
},30000);

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

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

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

// In jest.setup.js
jest.setTimeout(30000)

如果在Jest <= 23:

// In jest.config.js
module.exports = {
  setupTestFrameworkScriptFile: './jest.setup.js'
}

如果在笑话> 23:

// In jest.config.js
module.exports = {
  setupFilesAfterEnv: ['./jest.setup.js']
}