diff --git a/test/fixtures/test-runner/coverage/coverage-control-comments.js b/test/fixtures/test-runner/coverage/coverage-control-comments.js new file mode 100644 index 00000000000000..3fbc2fbdd616bc --- /dev/null +++ b/test/fixtures/test-runner/coverage/coverage-control-comments.js @@ -0,0 +1,25 @@ +'use strict'; +const { test } = require('node:test'); + +function coveredFunction() { + return 'This function is covered in coverage'; +} + +/* node:coverage ignore next 7 */ +function ignoredFunctionDefinitionWithCount() { + const ignoredVar = true; + if (ignoredVar) { + return 'This line is ignored'; + } + return 'This should not be returned'; +} + +/* node:coverage disable */ +function disabledFunction() { + return 'This function is entirely disabled in coverage'; +} +/* node:coverage enable */ + +test('coverage control comments fixture', () => { + coveredFunction(); +}); diff --git a/test/parallel/test-runner-coverage.js b/test/parallel/test-runner-coverage.js index 0de2af4d57a98c..724d56caaf8a74 100644 --- a/test/parallel/test-runner-coverage.js +++ b/test/parallel/test-runner-coverage.js @@ -550,3 +550,41 @@ test('correctly prints the coverage report of files contained in parent director assert(result.stdout.toString().includes(report)); assert.strictEqual(result.status, 0); }); + +test('should respect /* node:coverage */ comments', skipIfNoInspector, () => { + const report = [ + '# start of coverage report', + '# ---------------------------------------------------------------------------------', + '# file | line % | branch % | funcs % | uncovered lines', + '# ---------------------------------------------------------------------------------', + '# test | | | | ', + '# fixtures | | | | ', + '# test-runner | | | | ', + '# coverage | | | | ', + '# coverage-control-comments.js | 100.00 | 100.00 | 100.00 | ', + '# ---------------------------------------------------------------------------------', + '# all files | 100.00 | 100.00 | 100.00 | ', + '# ---------------------------------------------------------------------------------', + '# end of coverage report', + ].join('\n'); + + if (common.isWindows) { + return report.replaceAll('/', '\\'); + } + + const fixture = fixtures.path('test-runner', 'coverage', 'coverage-control-comments.js'); + const args = [ + '--test', + '--experimental-test-coverage', + '--test-coverage-exclude=!test/**', + '--test-reporter', + 'tap', + fixture, + ]; + + const result = spawnSync(process.execPath, args); + + assert.strictEqual(result.stderr.toString(), ''); + assert(result.stdout.toString().includes(report)); + assert.strictEqual(result.status, 0); +});