Skip to content

Instantly share code, notes, and snippets.

@AriPerkkio
Last active January 31, 2023 13:36
Show Gist options
  • Save AriPerkkio/c2df034cd71b0dfcc934c477758c20ee to your computer and use it in GitHub Desktop.
Save AriPerkkio/c2df034cd71b0dfcc934c477758c20ee to your computer and use it in GitHub Desktop.
node:inspector + V8 Profiler.*PreciseCoverage
import { writeFileSync } from "node:fs";
import inspector from "node:inspector";
function firstMethod() {}
function secondMethod() {}
const session = new inspector.Session();
const collectedCoverage = [];
session.connect();
session.post("Profiler.enable");
session.post("Runtime.enable");
session.post("Profiler.startPreciseCoverage", {
callCount: true,
detailed: true,
});
firstMethod();
await collectCoverage();
secondMethod();
await collectCoverage();
async function collectCoverage() {
await new Promise((resolve, reject) => {
session.post("Profiler.takePreciseCoverage", async (error, coverage) => {
if (error) return reject(error);
const filtered = coverage.result.filter(
(entry) => !entry.url.startsWith("node:")
);
collectedCoverage.push(...filtered);
resolve();
});
});
}
writeFileSync(
"./coverage.json",
JSON.stringify(collectedCoverage, null, 2),
"utf8"
);
[
{
"scriptId": "132",
"url": "file:///x/y/repro/index.mjs",
"functions": [
{
"functionName": "firstMethod",
"ranges": [
{
"startOffset": 82,
"endOffset": 107,
"count": 1
}
],
"isBlockCoverage": true
},
{
"functionName": "collectCoverage",
"ranges": [
{
"startOffset": 465,
"endOffset": 844,
"count": 1
},
{
"startOffset": 842,
"endOffset": 843,
"count": 0
}
],
"isBlockCoverage": true
},
{
"functionName": "",
"ranges": [
{
"startOffset": 520,
"endOffset": 840,
"count": 1
}
],
"isBlockCoverage": true
},
{
"functionName": "",
"ranges": [
{
"startOffset": 592,
"endOffset": 834,
"count": 0
}
],
"isBlockCoverage": false
}
]
},
{
"scriptId": "132",
"url": "file:///x/y/repro/index.mjs",
"functions": [
{
"functionName": "",
"ranges": [
{
"startOffset": 0,
"endOffset": 940,
"count": 1
}
],
"isBlockCoverage": false
},
{
"functionName": "firstMethod",
"ranges": [
{
"startOffset": 82,
"endOffset": 107,
"count": 0
}
],
"isBlockCoverage": true
},
{
"functionName": "secondMethod",
"ranges": [
{
"startOffset": 108,
"endOffset": 134,
"count": 1
}
],
"isBlockCoverage": true
},
{
"functionName": "collectCoverage",
"ranges": [
{
"startOffset": 465,
"endOffset": 844,
"count": 1
}
],
"isBlockCoverage": true
},
{
"functionName": "",
"ranges": [
{
"startOffset": 520,
"endOffset": 840,
"count": 1
}
],
"isBlockCoverage": true
},
{
"functionName": "",
"ranges": [
{
"startOffset": 592,
"endOffset": 834,
"count": 1
},
{
"startOffset": 638,
"endOffset": 659,
"count": 0
}
],
"isBlockCoverage": true
},
{
"functionName": "",
"ranges": [
{
"startOffset": 716,
"endOffset": 757,
"count": 3
}
],
"isBlockCoverage": true
}
]
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment