diff --git a/.circleci/config.yml b/.circleci/config.yml index ee5db147..96b131a3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -130,9 +130,9 @@ workflows: - run: name: Check code coverage 📈 command: | - node ../../scripts/check-coverage server.js - node ../../scripts/check-coverage main.js - node ../../scripts/check-coverage string-utils.js + node ../../scripts/check-coverage fullstack/server/server.js + node ../../scripts/check-coverage fullstack/main.js + node ../../scripts/check-coverage fullstack/string-utils.js node ../../scripts/only-covered server.js main.js string-utils.js working_directory: examples/fullstack diff --git a/task.js b/task.js index 206548c3..f5621960 100644 --- a/task.js +++ b/task.js @@ -1,6 +1,6 @@ // @ts-check const istanbul = require('istanbul-lib-coverage') -const { join, resolve } = require('path') +const { join, resolve, isAbsolute } = require('path') const { existsSync, mkdirSync, readFileSync, writeFileSync } = require('fs') const execa = require('execa') const fs = require('fs') @@ -37,6 +37,35 @@ function saveCoverage(coverage) { writeFileSync(nycFilename, JSON.stringify(coverage, null, 2)) } +/** + * Looks at all coverage objects in the given JSON coverage file + * and if the file is relative, and exists, changes its path to + * be absolute. + */ +function resolvePaths(nycFilename) { + const nycCoverage = JSON.parse(readFileSync(nycFilename, 'utf8')) + let changed + Object.keys(nycCoverage).forEach(key => { + const coverage = nycCoverage[key] + if (coverage.path && !isAbsolute(coverage.path)) { + if (existsSync(coverage.path)) { + debug('resolving path %s', coverage.path) + coverage.path = resolve(coverage.path) + changed = true + } + } + }) + + if (changed) { + debug('saving updated file %s', nycFilename) + writeFileSync( + nycFilename, + JSON.stringify(nycCoverage, null, 2) + '\n', + 'utf8' + ) + } +} + const tasks = { /** * Clears accumulated code coverage information. @@ -97,6 +126,8 @@ const tasks = { return null } + resolvePaths(nycFilename) + if (customNycReportScript) { debug( 'saving coverage report using script "%s" from package.json, command: %s',