page-unit.ts and native-bridge.ts run the page's script outside a browser, so the page's coverage counted none of what they test, and native.ts read as mostly untested. In a coverage run they now run the script from a file of its own, named as the browser names it, under NODE_V8_COVERAGE (scripts/coverage-node.sh, before the browser suite in npm run coverage:page and coverage.sh api), and the report's teardown takes their record in, mapped to web/src by the build's source map: the page's lines went from 73.3% to 80.0% of 3,043, native.ts to 93 of 120. The cargo tests in coverage.sh's container run on Postgres, as production does, when IPX_TEST_DATABASE_URL names the _test database, from the shell or else /src/.envrc (that variable only); on SQLite without it. The integration tests' own files are left out of the totals; a crate's inline mod tests cannot be on stable Rust. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 lines
1.1 KiB
TypeScript
21 lines
1.1 KiB
TypeScript
// The page's coverage report, once every test has added its page's (coverage.ts, #390), and its
|
|
// lines file by file in summary.json, which scripts/coverage-metrics.ts reads for Grafana (#394).
|
|
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import { CoverageReport } from 'monocart-coverage-reports';
|
|
import { coverageOptions } from './coverage.ts';
|
|
|
|
/// Where a coverage run's page unit and native-bridge tests write V8's record of what they ran.
|
|
export const NODE_COVERAGE = 'target/coverage/node-v8';
|
|
|
|
export default async function teardown() {
|
|
if (!process.env.IPX_COVERAGE) return;
|
|
const report = new CoverageReport(coverageOptions);
|
|
// What the page's Node tests ran of it, when the run measured them first (NODE_V8_COVERAGE, #407).
|
|
if (fs.existsSync(NODE_COVERAGE)) await report.addFromDir(NODE_COVERAGE);
|
|
const results = await report.generate();
|
|
if (!results) return;
|
|
const lines = results.files.map((f) => ({ file: f.sourcePath, covered: f.summary.lines.covered, total: f.summary.lines.total }));
|
|
fs.writeFileSync(path.join(coverageOptions.outputDir!, 'summary.json'), JSON.stringify({ lines }, null, 2));
|
|
}
|