Converting Playwright to Istanbul Coverage - codeceptjs/CodeceptJS GitHub Wiki

How to convert playwright coverage format to istanbul coverage

To convert coverage generated from playwright to istanbul coverage, you first need to install

Once installed, convert the coverage to a format which istanbul can recognize, by writing a script as shown below.

import glob from 'glob'
import v8toIstanbul from 'v8-to-istanbul'
let coverage

import fs from 'fs'

const coverageFolder = `${process.cwd()}/coverage`

async function isExists(path) {
    try {
        await fs.access(path, null)
        return true
    } catch {
        return false
    }
}

glob.sync(process.cwd() + '/output/coverage/**/').forEach(item => {
    const directory = fs.opendirSync(item)
    let file
    while ((file = directory.readSync()) !== null) {
        if (file && file.name.includes('.coverage.json') === true) {
            const fileName = file.name
            if (fileName) {
                coverage = require(`${process.cwd()}/output/coverage/${fileName}`)
            }
        }
    }
    directory.closeSync()
})

void (async () => {
    for (const entry of coverage) {
        // Used to get file name
        const file = entry.url.match(/(?:http(s)*:\/\/.*\/)(?<file>.*)/)

        const converter = v8toIstanbul(file.groups.file, 0, {
            source: entry.source,
        })

        await converter.load()
        converter.applyCoverage(entry.functions)

        // Store converted coverage file which can later be used to generate report
        const exist = await isExists(coverageFolder)
        if (!exist) {
            fs.mkdirSync(coverageFolder, {recursive: true})
        }

        await fs.writeFileSync(`${coverageFolder}/final.json`, JSON.stringify(converter.toIstanbul(), null, 2))
    }
})()

Or simply use the plugin codeceptjs-monocart-coverage

  • Install
npm i codeceptjs-monocart-coverage
  • Usage
// codecept.conf.js
{
    plugins: {
        monocart: {
            require: 'codeceptjs-monocart-coverage',
            enabled: true,
            coverageOptions: {
                // more options: https://github.com/cenfun/monocart-coverage-reports
                name: 'My CodeceptJS Coverage Report',
                outputDir: 'coverage-reports'
            }
        }
    },
    helpers: {
        // Coverage is only supported in Playwright or Puppeteer
        Playwright: {
            browser: 'chromium',
            url: 'http://localhost',
            show: false
        }
        // Puppeteer: {
        //     url: 'http://localhost',
        //     show: false
        // }
    }
}
⚠️ **GitHub.com Fallback** ⚠️