utopia-ui/cypress/plugins/parallel-reporter.js
mahula 78a8c68800
feat(other): initial end-to-end tests working in github ci and locally (#402)
Co-authored-by: Ulf Gebhardt <ulf.gebhardt@webcraft-media.de>
2025-10-09 21:59:06 +02:00

72 lines
2.3 KiB
JavaScript

/**
* Cypress Plugin for Enhanced Parallel Test Reporting
* Handles mochawesome report generation for parallel test execution
*/
const path = require('path')
const fs = require('fs')
module.exports = (on, config) => {
// Ensure results directory exists
const resultsDir = path.join(config.projectRoot, 'results')
if (!fs.existsSync(resultsDir)) {
fs.mkdirSync(resultsDir, { recursive: true })
}
// Configure mochawesome for parallel execution - JSON only for merging
const splitIndex = process.env.SPLIT_INDEX || '0'
const timestamp = new Date().toISOString().replace(/[:.]/g, '-')
config.reporterOptions = {
...config.reporterOptions,
reportFilename: `split-${splitIndex}-${timestamp}-[name]`,
reportDir: resultsDir,
overwrite: false,
html: false, // No individual HTML files
json: true, // Only JSON for merging into one report
embeddedScreenshots: true,
useInlineDiffs: true
}
// Task for logging parallel execution info
on('task', {
log(message) {
console.log(`[Parallel ${splitIndex}] ${message}`)
return null
},
logReportInfo() {
console.log(`[Parallel ${splitIndex}] Report will be saved as: report-${splitIndex}-${timestamp}.json`)
return null
}
})
// Before run hook
on('before:run', (details) => {
console.log(`[Parallel ${splitIndex}] Starting test execution`)
console.log(`[Parallel ${splitIndex}] Browser: ${details.browser.name}`)
console.log(`[Parallel ${splitIndex}] Specs: ${details.specs.length}`)
return details
})
// After run hook
on('after:run', (results) => {
console.log(`[Parallel ${splitIndex}] Test execution completed`)
console.log(`[Parallel ${splitIndex}] Total tests: ${results.totalTests}`)
console.log(`[Parallel ${splitIndex}] Passed: ${results.totalPassed}`)
console.log(`[Parallel ${splitIndex}] Failed: ${results.totalFailed}`)
// Ensure the report file was created
const reportFile = path.join(resultsDir, `report-${splitIndex}-${timestamp}.json`)
if (fs.existsSync(reportFile)) {
console.log(`[Parallel ${splitIndex}] ✅ Report saved: ${reportFile}`)
} else {
console.log(`[Parallel ${splitIndex}] ❌ Report not found: ${reportFile}`)
}
return results
})
return config
}