我在用木偶师和小丑做一些前端测试。
我的测试如下:
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
我是否得到这个错误似乎是随机的
为什么会这样?
你也可以得到基于愚蠢的拼写错误的超时错误。例如,这个看似无伤大雅的错误:
describe('Something', () => {
it('Should do something', () => {
expect(1).toEqual(1)
})
it('Should do nothing', something_that_does_not_exist => {
expect(1).toEqual(1)
})
})
产生以下错误:
FAIL src/TestNothing.spec.js (5.427s)
● Something › Should do nothing
Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.
at node_modules/jest-jasmine2/build/queue_runner.js:68:21
at Timeout.callback [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:678:19)
虽然所发布的代码示例没有受到这种影响,但它可能是其他地方失败的原因。还要注意,我没有为任何地方设置超时——无论是在这里还是在配置中。5000毫秒只是默认设置。
对于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)
我想补充(这是一个有点长的评论),即使超时3000,我的测试有时仍然会(随机)失败
Timeout -在jest.setTimeout指定的5000ms超时内没有调用异步回调。
感谢Tarun的精彩回答,我认为修复大量测试的最短方法是:
describe('Puppeteer tests', () => {
beforeEach(() => {
jest.setTimeout(10000);
});
test('Best Jest test fest', async () => {
// Blah
});
});