From 9029c20247036d4f904e7de25c53d4f97ad26b0d Mon Sep 17 00:00:00 2001 From: Corey Farrell Date: Wed, 17 Apr 2019 09:36:40 -0400 Subject: [PATCH] fix: Exit with code 1 when nyc doesn't know what to do. When nyc is not told to do anything this is an error. We already printed the help message to stderr, now we exit with code 1 to indicate that nyc exited without doing anything. Add a test to cover this edge case and verify that both `nyc` and `nyc --help` produce output as expected to stdout and stderr, exit with the proper code. --- bin/nyc.js | 1 + test/nyc-integration.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/bin/nyc.js b/bin/nyc.js index cd225844d..7c188e40a 100755 --- a/bin/nyc.js +++ b/bin/nyc.js @@ -85,5 +85,6 @@ if ([ }) } else { // I don't have a clue what you're doing. + process.exitCode = 1 yargs.showHelp() } diff --git a/test/nyc-integration.js b/test/nyc-integration.js index 91bd358ca..f7be9564a 100644 --- a/test/nyc-integration.js +++ b/test/nyc-integration.js @@ -1079,6 +1079,40 @@ describe('the nyc cli', function () { }) }) + it('help shows to stderr when main command doesn\'t know what to do', done => { + const msgs = {} + let waitingFor = 2 + const doSpawn = (args, type, expectCode) => { + const proc = spawn(process.execPath, args, { + cwd: fixturesCLI, + env + }) + msgs[type] = { + out: '', + err: '' + } + proc.stdout.on('data', chunk => { + msgs[type].out += chunk + }) + proc.stderr.on('data', chunk => { + msgs[type].err += chunk + }) + proc.on('close', code => { + code.should.equal(expectCode) + waitingFor-- + if (waitingFor === 0) { + msgs.help.out.should.equal(msgs.unknown.err) + msgs.help.err.should.equal('') + msgs.unknown.out.should.equal('') + done() + } + }) + } + + doSpawn([bin, '--help'], 'help', 0) + doSpawn([bin], 'unknown', 1) + }) + describe('args', function () { it('does not interpret args intended for instrumented bin', function (done) { var args = [bin, '--silent', process.execPath, 'args.js', '--help', '--version']