From 22a5ea0b67c3cc59364987cbff93fbaba8c26138 Mon Sep 17 00:00:00 2001 From: Corey Farrell Date: Sun, 6 Oct 2019 11:04:01 -0400 Subject: [PATCH] chore: Coverage for signal-exit handler. (#1190) This allows us to record coverage for all code called from the signal-exit handler. --- index.js | 17 ++++++++++++++--- self-coverage-helper.js | 31 ++++++++++++++++++++----------- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/index.js b/index.js index c0f4d6e0d..7d121178f 100755 --- a/index.js +++ b/index.js @@ -25,9 +25,16 @@ const util = require('util') const debugLog = util.debuglog('nyc') +let selfCoverageHelper + /* istanbul ignore next */ if (/self-coverage/.test(__dirname)) { - require('../self-coverage-helper') + selfCoverageHelper = require('../self-coverage-helper') +} else { + // Avoid additional conditional code + selfCoverageHelper = { + onExit () {} + } } function coverageFinder () { @@ -323,11 +330,15 @@ class NYC { } _wrapExit () { + selfCoverageHelper.registered = true + // we always want to write coverage // regardless of how the process exits. onExit( - /* istanbul ignore next: the callback is run but coverage is not recorded */ - () => this.writeCoverageFile(), + () => { + this.writeCoverageFile() + selfCoverageHelper.onExit() + }, { alwaysLast: true } ) } diff --git a/self-coverage-helper.js b/self-coverage-helper.js index 9eeeb68b0..51ebd764b 100644 --- a/self-coverage-helper.js +++ b/self-coverage-helper.js @@ -5,16 +5,25 @@ const fs = require('fs') const mkdirp = require('make-dir') const onExit = require('signal-exit') -onExit(function () { - var coverage = global.___NYC_SELF_COVERAGE___ - if (typeof ___NYC_SELF_COVERAGE___ === 'object') coverage = ___NYC_SELF_COVERAGE___ - if (!coverage) return +module.exports = { + registered: false, + onExit () { + const coverage = ___NYC_SELF_COVERAGE___ - var selfCoverageDir = path.join(__dirname, '.self_coverage') - mkdirp.sync(selfCoverageDir) - fs.writeFileSync( - path.join(selfCoverageDir, process.pid + '.json'), - JSON.stringify(coverage), - 'utf-8' - ) + const selfCoverageDir = path.join(__dirname, '.self_coverage') + mkdirp.sync(selfCoverageDir) + fs.writeFileSync( + path.join(selfCoverageDir, process.pid + '.json'), + JSON.stringify(coverage), + 'utf-8' + ) + } +} + +onExit(() => { + if (module.exports.registered) { + return + } + + module.exports.onExit() })