如何从木偶中返回摩卡的测试结果?

时间:2019-09-14 23:32:34

标签: javascript unit-testing mocha frontend puppeteer

我想在无头浏览器中运行mochajs前端单元测试,特别是使用puppeteer。因此,按照mochajs页面here上的非常简单的示例,我正在运行基本的单元测试,并看到mocha的结果并将它们呈现在 page < / em>应该是。我看到当我在真实的浏览器中加载简单示例时,它们也将呈现为铬的console。一切都很好。但是,我想从调用此脚本返回这些结果。我如何通过在mochajs中运行puppeteer返回这些测试结果?换句话说:

$ node my-script-running-mocha-in-puppeteer.js

  Array
    #indexOf()
      ✓ should return -1 when the value is not present


  1 passing (9ms)

我的代码基本上是这样的:

const puppeteer = require('puppeteer');

 puppeteer.launch().then(async browser => {
  const page = await browser.newPage();
  await page.setContent(`
     /* 
        HTML page with mocha, unit tests and source.
     */
  `);  

  // Get page content
  const content = await page.content();

  // I see the mocha test result in the page but now I 
  // want to return them from this script.
  console.log(content);
  await browser.close();
});


1 个答案:

答案 0 :(得分:2)

正如您所说的,mocha还将数据打印到控制台中,这可能是获得测试结果的最简单方法。

简单方法

要简单地反映浏览器的IO(包括记录到控制台的所有数据),您可以在启动浏览器时启用选项dumpio

puppeteer.launch({ dumpio: true })

puppeteer.launch的文档报价:

  

dumpio <boolean>是否将浏览器进程stdout和stderr用管道传输到process.stdoutprocess.stderr中。默认为false

请注意,这还将把其他信息从浏览器打印到控制台。如果仅在查找控制台数据,则可以使用第二个选项。

仅记录对console.log等的呼叫。

要仅获取记录到console.logconsole.info等的数据,可以收听console事件。

page.on('console', consoleMessage => {
    console.log(consoleMessage.text());
    if (consoleMessage.type() === 'error') {
        // handle error output
    }
});

这样,您可以将所有输出捕获到控制台中。您甚至可以使用consoleMessage.type()来区分错误,警告和正常输出。