UNPKG

ember-cli-code-coverage

Version:
79 lines (64 loc) 2.18 kB
'use strict'; const path = require('path'); const getConfig = require('./config'); const dir = require('node-dir'); const { createReport } = require('./reports'); /** * Merge together coverage files created when running in multiple threads, * for example when being used with ember exam and parallel runs. */ module.exports = { name: 'coverage-merge', description: 'Merge multiple coverage files together.', run() { const libCoverage = require('istanbul-lib-coverage'); const libReport = require('istanbul-lib-report'); let config = this._getConfig(); let coverageFolderSplit = config.coverageFolder.split('/'); let coverageFolder = coverageFolderSplit.pop(); let coverageRoot = this.project.root + '/' + coverageFolderSplit.join('/'); let coverageDirRegex = new RegExp(coverageFolder + '_.*'); let map = libCoverage.createCoverageMap(); return new Promise(function (resolve, reject) { dir.readFiles( coverageRoot, { matchDir: coverageDirRegex, match: /coverage-final\.json/ }, function (err, coverageSummary, next) { if (err) { reject(err); } map.merge(JSON.parse(coverageSummary)); next(); }, function (err) { if (err) { reject(err); } let { reporters } = config; if (!reporters.includes('json-summary')) { reporters.push('json-summary'); } // create a context for report generation let context = libReport.createContext({ dir: path.join(coverageRoot, coverageFolder), watermarks: libReport.getDefaultWatermarks(), coverageMap: map, }); reporters.forEach((reporter) => { let report = createReport(reporter); // call execute to synchronously create and write the report to disk report.execute(context); }); resolve(); } ); }); }, /** * Get project configuration * @returns {Configuration} project configuration */ _getConfig() { return getConfig(this.project.configPath()); }, };