@wdio/json-reporter
Version:
A WebdriverIO plugin to report results in json format.
51 lines (50 loc) • 1.81 kB
JavaScript
// src/mergeResults.ts
import fs from "node:fs/promises";
import path from "node:path";
var DEFAULT_FILENAME = "wdio-merged.json";
async function mergeResults(dir = process.argv[2], filePattern = process.argv[3], customFileName = process.argv[4]) {
const doesDirExist = fs.access(dir).then(() => true, () => false);
if (!doesDirExist) {
throw new Error(`Directory "${dir}" does not exist.`);
}
const rawData = await getDataFromFiles(dir, filePattern);
const mergedResults = mergeData(rawData);
if (customFileName) {
const fileName = customFileName || DEFAULT_FILENAME;
const filePath = path.join(dir, fileName);
await fs.writeFile(filePath, JSON.stringify(mergedResults));
}
return mergedResults;
}
async function getDataFromFiles(dir, filePattern) {
const fileNames = (await fs.readdir(dir)).filter((file) => file.match(filePattern));
const data = [];
await Promise.all(fileNames.map(async (fileName) => {
data.push(JSON.parse((await fs.readFile(`${dir}/${fileName}`)).toString()));
}));
return data;
}
function mergeData(rawData) {
if (rawData.length === 0) {
return {};
}
const mergedResults = {
...rawData[0],
capabilities: [rawData[0].capabilities]
};
for (const data of rawData.slice(1)) {
mergedResults.suites.push(...data.suites);
mergedResults.specs.push(...data.specs);
mergedResults.state.passed += data.state.passed;
mergedResults.state.failed += data.state.failed;
mergedResults.state.skipped += data.state.skipped;
mergedResults.capabilities.push(data.capabilities);
}
mergedResults.suites.forEach((suite) => {
mergedResults.end = suite.end && mergedResults.end && suite.end > mergedResults.end ? suite.end : mergedResults.end;
});
return mergedResults;
}
export {
mergeResults as default
};