'before' 中异步功能出错 - 使用摩卡和木偶师进行测试



我正试图在'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);

这显然将仅为这一测试设置超时。


如果我应该给出一个偏好,我会选择第一个选项,因为这是我期望的配置值。挂钩和测试是关于测试步骤的,而不是设置超时,所以我会避免在那里做。如果我需要为一个特定的测试设置不同的超时,出于可读性的原因,我会选择我提到的最后一个选项。

最新更新