vitest
Version:
A blazing fast unit test framework powered by Vite
50 lines (47 loc) • 2.06 kB
JavaScript
import { readFileSync, writeFileSync } from 'node:fs';
const THRESHOLD_KEYS = ["lines", "functions", "statements", "branches"];
class BaseCoverageProvider {
updateThresholds({ configurationFile, coverageMap, thresholds }) {
if (!configurationFile)
throw new Error('Missing configurationFile. The "coverage.thresholdAutoUpdate" can only be enabled when configuration file is used.');
const summary = coverageMap.getCoverageSummary();
const thresholdsToUpdate = [];
for (const key of THRESHOLD_KEYS) {
const threshold = thresholds[key] || 100;
const actual = summary[key].pct;
if (actual > threshold)
thresholdsToUpdate.push(key);
}
if (thresholdsToUpdate.length === 0)
return;
const originalConfig = readFileSync(configurationFile, "utf8");
let updatedConfig = originalConfig;
for (const threshold of thresholdsToUpdate) {
const previousThreshold = (thresholds[threshold] || 100).toString();
const pattern = new RegExp(`(${threshold}\\s*:\\s*)${previousThreshold.replace(".", "\\.")}`);
const matches = originalConfig.match(pattern);
if (matches)
updatedConfig = updatedConfig.replace(matches[0], matches[1] + summary[threshold].pct);
else
console.error(`Unable to update coverage threshold ${threshold}. No threshold found using pattern ${pattern}`);
}
if (updatedConfig !== originalConfig) {
console.log("Updating thresholds to configuration file. You may want to push with updated coverage thresholds.");
writeFileSync(configurationFile, updatedConfig, "utf-8");
}
}
resolveReporters(configReporters) {
if (!Array.isArray(configReporters))
return [[configReporters, {}]];
const resolvedReporters = [];
for (const reporter of configReporters) {
if (Array.isArray(reporter)) {
resolvedReporters.push([reporter[0], reporter[1] || {}]);
} else {
resolvedReporters.push([reporter, {}]);
}
}
return resolvedReporters;
}
}
export { BaseCoverageProvider };