UNPKG

jest-puppeteer-istanbul

Version:

Collect code coverage information from end-to-end jest puppeteer tests.

63 lines (62 loc) 3.07 kB
"use strict"; const istanbul_lib_coverage_1 = require("istanbul-lib-coverage"); const transform_1 = require("@jest/transform"); const reporters_1 = require("@jest/reporters"); const storage_1 = require("./storage"); module.exports = class PuppeteerIstanbul extends reporters_1.CoverageReporter { constructor(globalConfig, _options) { const coverageReporters = [...(globalConfig.coverageReporters || [])]; // Remove "text" or "text-summary" from the origin config. Because the text result output by // the origin CoverageReporter doesn't include puppeteer information. let reporterIndex; if ((reporterIndex = globalConfig.coverageReporters.indexOf("text")) >= 0) globalConfig.coverageReporters.splice(reporterIndex, 1); if ((reporterIndex = globalConfig.coverageReporters.indexOf("text-summary")) >= 0) globalConfig.coverageReporters.splice(reporterIndex, 1); super(Object.assign(Object.assign({}, globalConfig), { coverageReporters: coverageReporters }), _options); this.shouldInstrumentOptions = { collectCoverage: globalConfig.collectCoverage, collectCoverageFrom: globalConfig.collectCoverageFrom, collectCoverageOnlyFrom: globalConfig.collectCoverageOnlyFrom, coverageProvider: globalConfig.coverageProvider, changedFiles: undefined, }; this.collectCoverage = globalConfig.collectCoverage; // Using environment variable to communicate between reporter and setup process.env.JEST_PUPPETEER_ISTANBUL_DIR = globalConfig.coverageDirectory; process.env.JEST_PUPPETEER_ISTANBUL_COVERAGE = this.collectCoverage ? "true" : "false"; this.coverageStorage = new storage_1.CoverageStorage(globalConfig.coverageDirectory); } onRunStart(_results, _options) { if (this.collectCoverage) { this.coverageStorage.delete(); return super.onRunStart(_results, _options); } } onTestResult(test, testResult) { if (this.collectCoverage) { const coverage = istanbul_lib_coverage_1.createCoverageMap({}); const mergeFileCoverage = ([filename, fileCoverage]) => { if (transform_1.shouldInstrument(filename, this.shouldInstrumentOptions, test.context.config)) { coverage.merge({ [filename]: fileCoverage }); } }; Object.entries(this.coverageStorage.read()).map(mergeFileCoverage); if (testResult.coverage) { Object.entries(testResult.coverage).map(mergeFileCoverage); } if (Object.keys(coverage).length) { testResult.coverage = coverage.data; } return super.onTestResult(test, testResult); } } onRunComplete(contexts, aggregatedResults) { if (this.collectCoverage) { return super.onRunComplete(contexts, aggregatedResults); } else { return Promise.resolve(); } } };