The issue requires understanding of coverage internals and V8 integration.
The issue involves incorrect handling of branch coverage (BRDA) entries when using `node:coverage ignore` comments. The fix requires modifying how coverage data is processed in the test runner to exclude both line and branch coverage for ignored code. The main challenge is understanding the V8 coverage internals and how they integrate with Node.js's test runner.
v24.13.0
Darwin 24.6.0 (macOS)
test_runner
/* node:coverage ignore next */ comment:// src/example.js
function getValue(condition) {
if (condition) {
return 'truthy';
}
/* node:coverage ignore next */
return 'falsy';
}
module.exports = { getValue };
// test/example.test.js
const { describe, it } = require('node:test');
const assert = require('node:assert');
const { getValue } = require('../src/example.js');
describe('getValue', () => {
it('should return truthy when condition is true', () => {
assert.strictEqual(getValue(true), 'truthy');
});
});
node --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=coverage/lcov.info --test test/example.test.js
lcov.infoAlways reproducible.
The /* node:coverage ignore next */ comment should exclude both:
This is the expected behavior because:
c8 (which also uses V8 coverage) correctly handles this by marking both DA and BRDA as covered for ignored linesreturn 'falsy';) is correctly excluded from the lcov outputBRDA:4,2,0,0BRDA:1,0,0,1
BRDA:1,1,0,1
BRDA:4,2,0,0 <-- This branch should be excluded but remains as uncovered
BRF:3
BRH:2 <-- Only 2 of 3 branches hit (66.67%)
DA:1,1
DA:2,1
DA:3,1
DA:4,1
DA:5,0
DA:7,1 <-- DA:6 is missing
Claim this issue to let others know you're working on it. You'll earn 10 points when you complete it!