I've written a small crawler with the help of Puppeteer.
Now I'm facing the challenge that my tests are rather slowly (> 3 seconds for each test). I've been able to track it down to the launch
function of Puppeteer and the usage of Istanbul/nyc.
- If I run the test just with
mocha
, the tests are finished under 400 ms. - But if I additionally use
nyc
, the duration of the tests exceeds 3000 ms
All that I'm using is
'use strict';
const puppeteer = require('puppeteer');
module.exports = async function startBrowser() {
const options = {
args: [
// '--no-sandbox',
// '--disable-setuid-sandbox',
// '--disable-dev-shm-usage',
// '--disable-accelerated-2d-canvas',
// '--disable-gpu'
],
headless: false // true
};
return await puppeteer.launch(options);
};
Here is the test I'm using:
'use strict';
/* global describe: false, before: false, it: false,
beforeEach: false, afterEach: false, after: false, window: false, document: false */
const assert = require('assert').strict;
const startBrowser = require('../');
const util = require('util');
describe('Puppeteer', function() {
let pageManager;
it('start the browser', async function() {
this.timeout(10000);
console.time('startBrowser');
const browser = await startBrowser();
console.timeEnd('startBrowser');
assert(browser);
console.time('closeBrowser');
await browser.close();
console.timeEnd('closeBrowser');
});
});
I've created a repository with this code and test here.
nyc _mocha ./test/*.test.js
runs in ~3500ms, mocha ./test/*.test.js
takes only 130ms.
What I've tried so far:
- different combination of include/exclude nyc flags
- updating to latest versions of Puppeteer, nyc and mocha
- removing my Puppeteer arguments
- searching for Puppeteer & Istanbul related issues (with not much success)
- trying
headless: true
- bypassing all proxies, see this puppeteer issue
What can I do to have tests with coverage be as fast as the tests alone?
Using:
- Ubuntu 19.04
- node.js 10.15.3
headless: true
– Absolute