Add --coverage option to build scripts for tests (#54499)

This commit is contained in:
Ron Buckton
2023-06-02 16:00:47 -04:00
committed by GitHub
parent e8c7927641
commit 913e556373
7 changed files with 448 additions and 21 deletions

View File

@@ -7,13 +7,14 @@ import path from "path";
import { findUpFile, findUpRoot } from "./findUpDir.mjs";
import cmdLineOptions from "./options.mjs";
import { exec } from "./utils.mjs";
import { exec, ExecError } from "./utils.mjs";
const mochaJs = path.resolve(findUpRoot(), "node_modules", "mocha", "bin", "_mocha");
export const localBaseline = "tests/baselines/local/";
export const refBaseline = "tests/baselines/reference/";
export const localRwcBaseline = "internal/baselines/rwc/local";
export const refRwcBaseline = "internal/baselines/rwc/reference";
export const coverageDir = "coverage";
/**
* @param {string} runJs
@@ -35,11 +36,13 @@ export async function runConsoleTests(runJs, defaultReporter, runInParallel, opt
const keepFailed = cmdLineOptions.keepFailed;
const shards = +cmdLineOptions.shards || undefined;
const shardId = +cmdLineOptions.shardId || undefined;
const coverage = cmdLineOptions.coverage;
if (!cmdLineOptions.dirty) {
if (options.watching) {
console.log(chalk.yellowBright(`[watch] cleaning test directories...`));
}
await cleanTestDirs();
await cleanCoverageDir();
if (options.token?.signaled) {
return;
@@ -128,21 +131,28 @@ export async function runConsoleTests(runJs, defaultReporter, runInParallel, opt
/** @type {Error | undefined} */
let error;
const savedNodeEnv = process.env.NODE_ENV;
const savedNodeV8Coverage = process.env.NODE_V8_COVERAGE;
try {
setNodeEnvToDevelopment();
process.env.NODE_ENV = "development";
if (coverage) {
process.env.NODE_V8_COVERAGE = path.resolve(coverageDir, "tmp");
}
const { exitCode } = await exec(process.execPath, args, { token: options.token });
if (exitCode !== 0) {
errorStatus = exitCode;
error = new Error(`Process exited with status code ${errorStatus}.`);
await exec(process.execPath, args, { token: options.token });
if (coverage) {
await exec("npm", ["--prefer-offline", "exec", "--", "c8", "report"], { token: options.token });
}
}
catch (e) {
errorStatus = undefined;
errorStatus = e instanceof ExecError ? e.exitCode ?? undefined : undefined;
error = /** @type {Error} */ (e);
}
finally {
restoreSavedNodeEnv();
if (coverage) {
process.env.NODE_V8_COVERAGE = savedNodeV8Coverage;
}
process.env.NODE_ENV = savedNodeEnv;
}
await del("test.config");
@@ -169,6 +179,10 @@ export async function cleanTestDirs() {
await fs.promises.mkdir(localBaseline, { recursive: true });
}
async function cleanCoverageDir() {
await del([coverageDir]);
}
/**
* used to pass data from command line directly to run.js
* @param {string} tests
@@ -200,17 +214,6 @@ export function writeTestConfigFile(tests, runners, light, taskConfigsFolder, wo
fs.writeFileSync("test.config", testConfigContents);
}
/** @type {string | undefined} */
let savedNodeEnv;
function setNodeEnvToDevelopment() {
savedNodeEnv = process.env.NODE_ENV;
process.env.NODE_ENV = "development";
}
function restoreSavedNodeEnv() {
process.env.NODE_ENV = savedNodeEnv;
}
function deleteTemporaryProjectOutput() {
return del(path.join(localBaseline, "projectOutput/"));
}