wdio-mochawesome-reporter
Version:
A WebdriverIO plugin. Generates json results in Mochawesome format.
62 lines (52 loc) • 2.41 kB
JavaScript
const fs = require('fs')
const path = require('path')
const mergeResults = (...args) => {
const dir = args[0] || process.argv[2]
const filePattern = args[1] || process.argv[3]
const customFileName = args[2] || process.argv[4]
const rawData = getDataFromFiles(dir, filePattern)
const mergedResults = mergeData(rawData)
writeFile(dir, mergedResults, customFileName)
}
function getDataFromFiles (dir, filePattern) {
const fileNames = fs.readdirSync(dir).filter(file => file.match(filePattern))
const data = []
fileNames.forEach(fileName => {
data.push(JSON.parse(fs.readFileSync(`${dir}/${fileName}`)))
})
return data
}
function mergeData (rawData) {
let mergedResults
rawData.forEach(data => {
if (mergedResults === undefined) {
// use the first result so that we have the right shape for the mochawesome report generator
mergedResults = {}
Object.assign(mergedResults, data)
} else {
// increment stats totals
mergedResults.stats.suites += data.stats.suites
mergedResults.stats.tests += data.stats.tests
mergedResults.stats.passes += data.stats.passes
mergedResults.stats.pending += data.stats.pending
mergedResults.stats.failures += data.stats.failures
mergedResults.stats.duration += data.stats.duration
mergedResults.stats.testsRegistered += data.stats.testsRegistered
mergedResults.stats.skipped += data.stats.skipped
mergedResults.stats.hasSkipped = mergedResults.stats.skipped > 0
mergedResults.stats.passPercent = mergedResults.stats.tests === 0 ? 0 : Math.round((mergedResults.stats.passes / mergedResults.stats.tests) * 100)
mergedResults.stats.pendingPercent = mergedResults.stats.tests === 0 ? 0 : Math.round((mergedResults.stats.pending / mergedResults.stats.tests) * 100)
// add suites
data.results[0].suites.forEach(suite => {
mergedResults.results[0].suites.push(suite)
})
}
})
return mergedResults
}
function writeFile (dir, mergedResults, customFileName) {
const fileName = customFileName || 'wdio-ma-merged.json'
const filePath = path.join(dir, fileName)
fs.writeFileSync(filePath, JSON.stringify(mergedResults))
}
module.exports = mergeResults