Code coverage is a measurement of how many lines/blocks/arcs of your code are executed while the automated tests are running.
Popular browsers, like Chrome and Firefox, offer a coverage tool as part of their developer tools.
However, you can also use puppeteer to automate code coverage. In this shot, we will see how to perform code coverage for JavaScript and CSS.
You can install puppeteer using npm or yarn:
npm i puppeteer
# or "yarn add puppeteer"
We will first use puppeteer to spin up a headless Chrome browser instance and ‘record’ the JavaScript and CSS usage for a webpage of interest.
The code below visits a page and retrieves the JS and CSS coverage objects:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Start recording JS and CSS coverage data
await Promise.all([
page.coverage.startJSCoverage(),
page.coverage.startCSSCoverage()
]);
await page.goto('https://example.com/');
// Retrive the coverage objects
const [jsCoverage, cssCoverage] = await Promise.all([
page.coverage.stopJSCoverage(),
page.coverage.stopCSSCoverage(),
]);
await browser.close();
})();
You can also emulate any browser environment with puppeteer. For example, you can use
page.emulate(devices['iPhone X'])
to emulate an iPhone X environment.
Now, let’s add code to examine the collected code coverage data.
const puppeteer = require('puppeteer');(async () => {const browser = await puppeteer.launch();const page = await browser.newPage();// Start recording JS and CSS coverage dataawait Promise.all([page.coverage.startCSSCoverage()]);// Visit desired pageawait page.goto('https://example.com');// Retrive the coverage objectsconst [jsCoverage, cssCoverage] = await Promise.all([page.coverage.stopJSCoverage(),page.coverage.stopCSSCoverage(),]);// Examine JS Coverageconst js_coverage = [...jsCoverage];let js_used_bytes = 0;let js_total_bytes = 0;let covered_js = "";for (const entry of js_coverage[0]) {js_total_bytes += entry.text.length;console.log(`Total Bytes for ${entry.url}: ${entry.text.length}`);for (const range of entry.ranges){js_used_bytes += range.end - range.start - 1;covered_js += entry.text.slice(range.start, range.end) + "\n";}}console.log(`Total Bytes of JS: ${js_total_bytes}`);console.log(`Used Bytes of JS: ${js_used_bytes}`);// Examine CSS Coverageconst css_coverage = [...cssCoverage];let css_used_bytes = 0;let css_total_bytes = 0;let covered_css = "";for (const entry of css_coverage[0]) {css_total_bytes += entry.text.length;console.log(`Total Bytes for ${entry.url}: ${entry.text.length}`);for (const range of entry.ranges){css_used_bytes += range.end - range.start - 1;covered_css += entry.text.slice(range.start, range.end) + "\n";}}console.log(`Total Bytes of CSS: ${css_total_bytes}`);console.log(`Used Bytes of CSS: ${css_used_bytes}`);await browser.close();})();
Unlock your potential: Puppeteer fundamentals series, all in one place!
To deepen your understanding of Puppeteer, explore our series of Answers below:
What is Puppeteer?
Learn about Puppeteer, a Node.js library that provides a high-level API for browser automation using headless Chrome or Chromium.
How to check for the browser version in Puppeteer
Discover how to retrieve the browser version using Puppeteer's browser.version()
method.
How to open the browser in headful mode with Puppeteer
Explore how to launch a visible browser instance by disabling the headless mode in Puppeteer.
How to get web page HTML with Puppeteer
Learn how to extract and manipulate a webpage’s HTML content using Puppeteer’s evaluate()
method.
What is the use of the setViewport method in Puppeteer?
Understand how setViewport()
customizes the browser’s viewport size for responsive testing and screenshots.
What is code coverage in Puppeteer?
Learn how to analyze unused JavaScript and CSS in web pages to optimize performance using Puppeteer’s coverage tool.
What is visual regression testing in Puppeteer?
Discover how Puppeteer can capture and compare screenshots to detect visual changes in web applications.
What is an accessibility test in Puppeteer?
Explore how Puppeteer, combined with accessibility tools like axe-core
, helps evaluate web accessibility compliance.
Free Resources