test_runner: fix typescript coverage

PR-URL: https://github.com/nodejs/node/pull/49406
Fixes: https://github.com/nodejs/node/issues/49398
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
Moshe Atlow 2023-09-05 00:45:07 +03:00 committed by GitHub
parent 0028fd12b7
commit 47c5152545
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 5 deletions

View File

@ -338,7 +338,7 @@ function mapRangeToLines(range, lines) {
mid = MathFloor((start + end) / 2);
let line = lines[mid];
if (startOffset >= line.startOffset && startOffset <= line.endOffset) {
if (startOffset >= line?.startOffset && startOffset <= line?.endOffset) {
while (endOffset > line?.startOffset) {
// If the range is not covered, and the range covers the entire line,
// then mark that line as not covered.
@ -363,7 +363,7 @@ function mapRangeToLines(range, lines) {
}
break;
} else if (startOffset >= line.endOffset) {
} else if (startOffset >= line?.endOffset) {
start = mid + 1;
} else {
end = mid - 1;
@ -538,4 +538,4 @@ function doesRangeContainOtherRange(range, otherRange) {
range.endOffset >= otherRange.endOffset;
}
module.exports = { setupCoverage };
module.exports = { setupCoverage, TestCoverage };

View File

@ -737,6 +737,8 @@ class Test extends AsyncResource {
this.reported = true;
reporter.plan(nesting, loc, harness.counters.topLevel);
// Call this harness.coverage() before collecting diagnostics, since failure to collect coverage is a diagnostic.
const coverage = harness.coverage();
for (let i = 0; i < diagnostics.length; i++) {
reporter.diagnostic(nesting, loc, diagnostics[i]);
}
@ -750,8 +752,6 @@ class Test extends AsyncResource {
reporter.diagnostic(nesting, loc, `todo ${harness.counters.todo}`);
reporter.diagnostic(nesting, loc, `duration_ms ${this.duration()}`);
const coverage = harness.coverage();
if (coverage) {
reporter.coverage(nesting, loc, coverage);
}

View File

@ -0,0 +1,13 @@
// Flags: --expose-internals --experimental-test-coverage
'use strict';
require('../../../common');
const { TestCoverage } = require('internal/test_runner/coverage');
const { test, mock } = require('node:test');
mock.method(TestCoverage.prototype, 'summary', () => {
throw new Error('Failed to collect coverage');
});
test('ok');

View File

@ -0,0 +1,16 @@
TAP version 13
# Subtest: ok
ok 1 - ok
---
duration_ms: *
...
1..1
# Warning: Could not report code coverage. Error: Failed to collect coverage
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms *

View File

@ -87,6 +87,7 @@ const tests = [
replaceTestDuration,
),
},
process.features.inspector ? { name: 'test-runner/output/coverage_failure.js' } : false,
]
.filter(Boolean)
.map(({ name, tty, transform }) => ({