如何从 puppeteer 返回 mocha 的测试结果?

Ale*_*lex 6 javascript frontend unit-testing mocha.js puppeteer

我想在无头浏览器中运行我的mochajs前端单元测试,特别是使用puppeteer因此,按照此处mochajs页面上的非常简单的示例,我正在运行基本单元测试,并看到结果,并且它们按应有的方式呈现在页面中我发现当我在真实的浏览器中加载简单的示例时,它们也会被渲染到 chromium 。一切都很棒。但是,我想从调用该脚本返回这些结果。如何从运行中返回这些测试结果?换句话说:mochaconsolemochajspuppeteer

\n\n
$ node my-script-running-mocha-in-puppeteer.js\n\n  Array\n    #indexOf()\n      \xe2\x9c\x93 should return -1 when the value is not present\n\n\n  1 passing (9ms)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
const puppeteer = require(\'puppeteer\');\n\n puppeteer.launch().then(async browser => {\n  const page = await browser.newPage();\n  await page.setContent(`\n     /* \n        HTML page with mocha, unit tests and source.\n     */\n  `);  \n\n  // Get page content\n  const content = await page.content();\n\n  // I see the mocha test result in the page but now I \n  // want to return them from this script.\n  console.log(content);\n  await browser.close();\n});\n\n\n
Run Code Online (Sandbox Code Playgroud)\n

Tho*_*orf 3

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

简单的方法

要简单地镜像浏览器的 IO(包括记录到控制台的任何数据),您可以dumpio在启动浏览器时启用该选项:

puppeteer.launch({ dumpio: true })
Run Code Online (Sandbox Code Playgroud)

引用文档puppeteer.launch

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

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

仅记录对console.log等的调用。

console.log要仅获取记录到或等的数据console.info,您可以监听该console事件。

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

这样,您就可以获取进入控制台的所有输出。您甚至可以用来consoleMessage.type()区分错误、警告和正常输出。