worker,coverage: support V8 coverage generation
PR-URL: https://github.com/nodejs/node/pull/22928 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
058c5b81cd
commit
0dbc8c8198
@ -1,9 +1,7 @@
|
||||
'use strict';
|
||||
const path = require('path');
|
||||
const { mkdirSync, writeFileSync } = require('fs');
|
||||
// TODO(addaleax): add support for coverage to worker threads.
|
||||
const hasInspector = process.config.variables.v8_enable_inspector === 1 &&
|
||||
require('internal/worker').isMainThread;
|
||||
const hasInspector = process.config.variables.v8_enable_inspector === 1;
|
||||
let inspector = null;
|
||||
if (hasInspector) inspector = require('inspector');
|
||||
|
||||
@ -14,7 +12,9 @@ function writeCoverage() {
|
||||
return;
|
||||
}
|
||||
|
||||
const filename = `coverage-${process.pid}-${Date.now()}.json`;
|
||||
const { threadId } = require('internal/worker');
|
||||
|
||||
const filename = `coverage-${process.pid}-${Date.now()}-${threadId}.json`;
|
||||
try {
|
||||
// TODO(bcoe): switch to mkdirp once #22302 is addressed.
|
||||
mkdirSync(process.env.NODE_V8_COVERAGE);
|
||||
|
5
test/fixtures/v8-coverage/worker.js
vendored
Normal file
5
test/fixtures/v8-coverage/worker.js
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
'use strict';
|
||||
const { Worker } = require('worker_threads');
|
||||
const path = require('path');
|
||||
|
||||
new Worker(path.resolve(__dirname, 'subprocess.js'));
|
@ -79,6 +79,23 @@ function nextdir() {
|
||||
assert.strictEqual(fixtureCoverage.functions[2].ranges[1].count, 0);
|
||||
}
|
||||
|
||||
// outputs coverage from worker.
|
||||
{
|
||||
const coverageDirectory = path.join(tmpdir.path, nextdir());
|
||||
const output = spawnSync(process.execPath, [
|
||||
'--experimental-worker',
|
||||
require.resolve('../fixtures/v8-coverage/worker')
|
||||
], { env: { ...process.env, NODE_V8_COVERAGE: coverageDirectory } });
|
||||
assert.strictEqual(output.status, 0);
|
||||
const fixtureCoverage = getFixtureCoverage('subprocess.js',
|
||||
coverageDirectory);
|
||||
assert.ok(fixtureCoverage);
|
||||
// first branch executed.
|
||||
assert.strictEqual(fixtureCoverage.functions[2].ranges[0].count, 1);
|
||||
// second branch did not execute.
|
||||
assert.strictEqual(fixtureCoverage.functions[2].ranges[1].count, 0);
|
||||
}
|
||||
|
||||
// does not output coverage if NODE_V8_COVERAGE is empty.
|
||||
{
|
||||
const coverageDirectory = path.join(tmpdir.path, nextdir());
|
||||
|
Loading…
x
Reference in New Issue
Block a user