mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-05 03:09:00 -05:00
Add --coverage option to build scripts for tests (#54499)
This commit is contained in:
@@ -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/"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user