Skip to content

Commit

Permalink
Increase code quality by increasing code coverage: lib/parse-args.js
Browse files Browse the repository at this point in the history
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
  • Loading branch information
mcknasty committed Jan 15, 2024
1 parent 4ae2a4d commit ba84f60
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 10 deletions.
18 changes: 10 additions & 8 deletions lib/parse-args.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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
}
Expand Down
4 changes: 2 additions & 2 deletions test/integration.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down Expand Up @@ -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 |
Expand Down
34 changes: 34 additions & 0 deletions test/parse-args.js
Original file line number Diff line number Diff line change
Expand Up @@ -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', () => {
Expand All @@ -25,6 +30,13 @@ 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', () => {
Expand All @@ -34,8 +46,20 @@ describe('parse-args', () => {
process.argv = ['node', 'c8', '--foo=99', 'my-app', '--help']
const argv = buildYargs().parse(hideInstrumenteeArgs())
argv.tempDirectory.endsWith('/coverage/tmp_').should.be.equal(true)
delete process.env.NODE_V8_COVERAGE
process.env.NODE_V8_COVERAGE = NODE_V8_COVERAGE
})
/** Commenting out till the print config PR is ready * /
it('should set it if undefined', () => {
const NODE_V8_COVERAGE = process.env.NODE_V8_COVERAGE
process.env.NODE_V8_COVERAGE = undefined
process.argv = ['node', 'c8', '--foo=99', 'my-app', '--help']
const argv = buildYargs().parse(hideInstrumenteeArgs())
argv.tempDirectory.endsWith('/coverage/tmp').should.be.equal(true)
delete process.env.NODE_V8_COVERAGE
process.env.NODE_V8_COVERAGE = NODE_V8_COVERAGE
})
/** */
})

describe('--config', () => {
Expand Down Expand Up @@ -63,6 +87,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', () => {
Expand Down

0 comments on commit ba84f60

Please sign in to comment.