如何在puppeteer pageerror上使mocha测试失败

时间:2018-01-01 20:10:05

标签: mocha puppeteer

我正在使用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

1 个答案:

答案 0 :(得分:1)

我意识到我可以跟踪页面抛出的错误,然后在测试结束时检查页面是否抛出任何错误。

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;
  }
});

这样可行,但测试只有在检查没有错误时才会失败。理想情况下,我希望找到一种方法,一旦页面抛出错误,测试就会失败。