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

我的测试如下:

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 -i同步运行一些测试,它会超时。无论出于何种原因,使用jest——runInBand(即使-i是一个别名)运行相同的测试都不会超时。

其他回答

在我的例子中,这个错误开始随机出现,即使在设置超时30000之后也不会消失。只需在终端中结束进程并重新运行测试,就可以为我解决这个问题。我还删除了超时,测试仍然再次通过。

落下我的2美分在这里,我有同样的问题在dosen的jest单元测试(不是所有的),我注意到,所有开始后,我添加到jestSetup这个polyfill为MutuationObservers:

if (!global.MutationObserver) {
    global.MutationObserver = function MutationObserverFun(callback) {
        this.observe = function(){};
        this.disconnect = function(){};
        this.trigger = (mockedMutationsList) => {
            callback(mockedMutationsList, this);
        };
    };
}

一旦我删除它测试开始工作再次正确。希望能帮助别人。

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

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

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

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

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

对于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)

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