我正试图在'before'挂钩中启动chrome浏览器。我在运行代码时不断收到以下错误:
let browser;
describe('Login Tests', function(){
let page;
before(async ()=> {
let launchOptions = {
headless: false,
executablePath: '/Applications/Chromium.app/Contents/MacOS/Chromium',
args: ['--start-maximized']
};
browser = await puppeteer.launch(launchOptions);
page = await browser.newPage();
await page.goto('http://localhost:8080');
await page.waitForSelector('body div');
})
it('should bring up login modal when clicking Client Login', async function(){
await page.waitForSelector('.navbar-start a[href$="#/login"]');
await page.click('.navbar-start a[href$="#/login"]');
let url = await page.url()
assert.equal(url, 'http://localhost:8080/#/login');
})
//....
})
错误:超过了2000ms的超时时间。对于异步测试和挂钩,请确保";done((";被称为;如果返回Promise,请确保它已解决。
当我将回调传递到异步函数并在完成后返回时,我仍然会收到以下错误。我在后钩中也出现了同样的错误。
有人能帮我吗?我已经被困了太久了:(
问题是mocha每次钩子和测试的默认超时为2000ms。您似乎没有在任何地方覆盖默认值。
要覆盖它,您有几个选项,一个是将此选项添加到.mocharc.json
:中
{
"timeout": 20000
}
这将给你20秒的超时时间;所有"-挂钩,测试。
另一个可以设置不同超时的选项是通过调用timeout()
方法在描述回调函数中:
describe('...', function () {
this.timeout(20000);
before(...);
it(...);
});
这将再次给您20秒的超时时间。这将影响描述块内的所有挂钩和测试。例如,如果你想只为挂钩前设置超时,你可以在挂钩前键入:
describe('...', function () {
before(function () {
this.timeout(20000);
});
it(...);
});
另一种设置不同超时的方法可能是:
it('...', function () {
// ...
}).timeout(20000);
这显然将仅为这一测试设置超时。
如果我应该给出一个偏好,我会选择第一个选项,因为这是我期望的配置值。挂钩和测试是关于测试步骤的,而不是设置超时,所以我会避免在那里做。如果我需要为一个特定的测试设置不同的超时,出于可读性的原因,我会选择我提到的最后一个选项。