我正在使用mocha和puppeteer来测试页面。如果页面抛出未捕获的异常,我希望测试失败。
这是我到目前为止所尝试的:
it('should fail because page has an error', async () => {
const browser = await puppeteer.launch({});
const page = await browser.newPage();
page.on('pageerror', (e) => {
// TODO: Make the test fail somehow
throw e;
});
await page.goto('http://example.com/page-that-throws-an-error');
});
当我运行mocha
时,这个测试成功但在我的终端留下了UnhandledPromiseRejectionWarning
。
我不认为我可以使用done(error)
回调,因为我已经在使用异步函数,而mocha会抱怨Error: Resolution method is overspecified
。
我意识到我可以跟踪页面抛出的错误,然后在测试结束时检查页面是否抛出任何错误。
it('should fail because page has an error', async () => {
const browser = await puppeteer.launch({});
const page = await browser.newPage();
const pageErrors = [];
page.on('pageerror', (e) => {
pageErrors.push(e);
});
await page.goto('http://example.com/page-that-throws-an-error');
for (const e of pageErrors) {
throw e;
}
});
这可行,但测试仅在检查没有错误时才会失败。理想情况下,我希望找到一种方法,一旦页面抛出错误,测试就会失败。