From 29d3e1a1ef6987c927405b8f2b5bbb10a20cd570 Mon Sep 17 00:00:00 2001 From: The Nasty Date: Sun, 14 Jan 2024 22:23:30 -0500 Subject: [PATCH] Increase code quality by increasing code coverage: lib/parse-args.js refactor: bumping code coverage to 100% for lib/parse-args.js. (#447) test: Adding a test case for NODE_V8_COVERAGE and changing the describe block title. (#447) test: Early exit branch test for hideInstrumenteeArgs function. (#447) test: Adding test for relative paths for relative report directory cli option. (#447) test: Adding test case for relative paths for temporary directory cli option. (#447) test: Adding test for passing node.js arguments to c8. (#447) test: relative directories for tempDirectoy and reportDir --- lib/parse-args.js | 18 ++++++++++-------- test/integration.js.snap | 4 ++-- test/parse-args.js | 31 +++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/lib/parse-args.js b/lib/parse-args.js index 21a9cd7a8..3aeaac897 100644 --- a/lib/parse-args.js +++ b/lib/parse-args.js @@ -30,7 +30,8 @@ function buildYargs (withCommands = false) { alias: ['o', 'report-dir'], group: 'Reporting options', describe: 'directory where coverage reports will be output to', - default: './coverage' + default: './coverage', + type: 'string' }) .options('all', { default: false, @@ -126,7 +127,8 @@ function buildYargs (withCommands = false) { }) .option('temp-directory', { describe: 'directory V8 coverage data is written to and read from', - default: process.env.NODE_V8_COVERAGE + default: process.env.NODE_V8_COVERAGE, + type: 'string' }) .option('clean', { default: true, @@ -207,12 +209,12 @@ function hideInstrumenteeArgs () { let argv = process.argv.slice(2) const yargv = parser(argv) - if (!yargv._.length) return argv - - // drop all the arguments after the bin being - // instrumented by c8. - argv = argv.slice(0, argv.indexOf(yargv._[0])) - argv.push(yargv._[0]) + if (yargv._.length !== 0) { + // drop all the arguments after the bin being + // instrumented by c8. + argv = argv.slice(0, argv.indexOf(yargv._[0])) + argv.push(yargv._[0]) + } return argv } diff --git a/test/integration.js.snap b/test/integration.js.snap index a9279c7e8..e5d411979 100644 --- a/test/integration.js.snap +++ b/test/integration.js.snap @@ -166,7 +166,7 @@ All files | 3.52 | 12.5 | 6.52 | 3.52 prettify.js | 0 | 0 | 0 | 0 | 1-2 sorter.js | 0 | 0 | 0 | 0 | 1-196 c8/lib | 0 | 0 | 0 | 0 | - parse-args.js | 0 | 0 | 0 | 0 | 1-224 + parse-args.js | 0 | 0 | 0 | 0 | 1-226 report.js | 0 | 0 | 0 | 0 | 1-402 source-map-from-file.js | 0 | 0 | 0 | 0 | 1-100 c8/lib/commands | 0 | 0 | 0 | 0 | @@ -531,7 +531,7 @@ All files | 3.52 | 12.5 | 6.52 | 3.52 prettify.js | 0 | 0 | 0 | 0 | 1-2 sorter.js | 0 | 0 | 0 | 0 | 1-196 c8/lib | 0 | 0 | 0 | 0 | - parse-args.js | 0 | 0 | 0 | 0 | 1-224 + parse-args.js | 0 | 0 | 0 | 0 | 1-226 report.js | 0 | 0 | 0 | 0 | 1-402 source-map-from-file.js | 0 | 0 | 0 | 0 | 1-100 c8/lib/commands | 0 | 0 | 0 | 0 | diff --git a/test/parse-args.js b/test/parse-args.js index 004c72413..5713c8d12 100644 --- a/test/parse-args.js +++ b/test/parse-args.js @@ -15,6 +15,11 @@ describe('parse-args', () => { const instrumenterArgs = hideInstrumenteeArgs() instrumenterArgs.should.eql(['--foo=99', 'my-app']) }) + it('test early exit from function if no arguments are passed', () => { + process.argv = [] + const instrumenterArgs = hideInstrumenteeArgs() + instrumenterArgs.length.should.eql(0) + }) }) describe('hideInstrumenterArgs', () => { @@ -25,17 +30,33 @@ describe('parse-args', () => { instrumenteeArgs.should.eql(['my-app', '--help']) argv.tempDirectory.endsWith(join('coverage', 'tmp')).should.be.equal(true) }) + it('interprets first args after -- as Node.js execArgv', () => { + const expected = [process.execPath, '--expose-gc', 'index.js'] + process.argv = ['node', 'c8', '--', '--expose-gc', 'index.js'] + const argv = buildYargs().parse(hideInstrumenteeArgs()) + const munged = hideInstrumenterArgs(argv) + munged.should.deep.equal(expected) + }) }) describe('with NODE_V8_COVERAGE already set', () => { it('should not override it', () => { const NODE_V8_COVERAGE = process.env.NODE_V8_COVERAGE + delete process.env.NODE_V8_COVERAGE process.env.NODE_V8_COVERAGE = './coverage/tmp_' process.argv = ['node', 'c8', '--foo=99', 'my-app', '--help'] const argv = buildYargs().parse(hideInstrumenteeArgs()) argv.tempDirectory.endsWith('/coverage/tmp_').should.be.equal(true) process.env.NODE_V8_COVERAGE = NODE_V8_COVERAGE }) + it('should set it if undefined', () => { + const NODE_V8_COVERAGE = process.env.NODE_V8_COVERAGE + delete process.env.NODE_V8_COVERAGE + process.argv = ['node', 'c8', '--foo=99', 'my-app', '--help'] + const argv = buildYargs().parse(hideInstrumenteeArgs()) + argv.tempDirectory.endsWith('/coverage/tmp').should.be.equal(true) + process.env.NODE_V8_COVERAGE = NODE_V8_COVERAGE + }) }) describe('--config', () => { @@ -63,6 +84,16 @@ describe('parse-args', () => { argv.lines.should.be.equal(100) argv.functions.should.be.equal(24) }) + it('should allow relative reports directories', () => { + const argsArray = ['node', 'c8', '--lines', '100', '--reports-dir', './coverage_'] + const argv = buildYargs().parse(argsArray) + argv.reportsDir.should.be.equal('./coverage_') + }) + it('should allow relative temporary directories', () => { + const argsArray = ['node', 'c8', '--lines', '100', '--temp-directory', './coverage/tmp_'] + const argv = buildYargs().parse(argsArray) + argv.tempDirectory.should.be.equal('./coverage/tmp_') + }) }) describe('--merge-async', () => {