UNPKG

visreg-test

Version:

A visual regression testing solution that offers an easy setup with simple yet powerful customisation options, wrapped up in a convenient CLI runner to make assessing and accepting/rejecting diffs a breeze.

90 lines (89 loc) 3.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.summarizeSuiteQueue = exports.summarizeResultsAndQuit = exports.summarizeResults = exports.summarizeTest = exports.resetSummaryState = void 0; const cli_1 = require("./cli"); const utils_1 = require("./utils"); let approvedFiles = []; let rejectedFiles = []; let failed; let duration; const resetSummaryState = () => { approvedFiles = []; rejectedFiles = []; failed = false; duration = 0; }; exports.resetSummaryState = resetSummaryState; const summarizeTest = () => { failed && console.log(`\x1b[2mStatus: \x1b[0m\x1b[33mpartial\x1b[0m`); console.log(`\x1b[2mType: \x1b[0m\x1b[0m${cli_1.programChoices.testType}\x1b[0m`); console.log(`\x1b[2mSuite: \x1b[0m\x1b[0m${cli_1.programChoices.suite}\x1b[0m`); cli_1.programChoices.targetEndpointTitles.length && console.log(`\x1b[2mEndpoint: \x1b[0m\x1b[0m${cli_1.programChoices.targetEndpointTitles.join(', ')}\x1b[0m`); cli_1.programChoices.targetViewports.length && console.log(`\x1b[2mViewport: \x1b[0m\x1b[0m${cli_1.programChoices.targetViewports.join(', ')}\x1b[0m`); duration && console.log(`\x1b[2mDuration: \x1b[0m\x1b[0m${duration}s\x1b[0m`); }; exports.summarizeTest = summarizeTest; const summarizeAssessment = () => { let files = (0, utils_1.getDiffingFilesFromTestResult)(); if (!files) { (0, utils_1.printColorText)('Visual regression passed! (No diffs found)', '32'); return; } (0, utils_1.printColorText)(`Total diffs assessed: ${approvedFiles.length + rejectedFiles.length}`, '2'); if (approvedFiles.length > 0) { console.log(`\x1b[2mApproved: \x1b[0m\x1b[32m${approvedFiles.length}\x1b[0m`); } if (rejectedFiles.length > 0) { console.log(`\x1b[2mRejected: \x1b[0m\x1b[31m${rejectedFiles.length}\x1b[0m`); } }; /** * Summarize results without calling process.exit(). Used in queue mode * so the process can continue to the next suite. */ const summarizeResults = (approvedFilesArg, rejectedFilesArg, failedArg) => { approvedFiles = approvedFilesArg; rejectedFiles = rejectedFilesArg; failed = failedArg; (0, utils_1.printColorText)('\n\nSummary', '4'); (0, exports.summarizeTest)(); summarizeAssessment(); (0, utils_1.cleanUp)(); }; exports.summarizeResults = summarizeResults; const summarizeResultsAndQuit = (approvedFilesArg, rejectedFilesArg, failedArg) => { (0, exports.summarizeResults)(approvedFilesArg, rejectedFilesArg, failedArg); process.exit(); }; exports.summarizeResultsAndQuit = summarizeResultsAndQuit; /** * Print a combined summary for a multi-suite queue run. */ const summarizeSuiteQueue = (suiteResults) => { (0, utils_1.printColorText)('\n\nQueue Summary', '4'); (0, utils_1.printColorText)('─'.repeat(60), '2'); let totalDiffs = 0; let totalFailed = 0; for (const result of suiteResults) { const status = result.failed ? '\x1b[33mpartial\x1b[0m' : '\x1b[32mpassed\x1b[0m'; const diffCount = result.diffs.length; totalDiffs += diffCount; if (result.failed) totalFailed++; console.log(`\x1b[2mSuite: \x1b[0m${result.suite} \x1b[2m| Status: \x1b[0m${status} \x1b[2m| Diffs: \x1b[0m${diffCount}`); } (0, utils_1.printColorText)('─'.repeat(60), '2'); console.log(`\x1b[2mSuites run: \x1b[0m${suiteResults.length}`); console.log(`\x1b[2mTotal diffs: \x1b[0m${totalDiffs}`); if (totalFailed > 0) { console.log(`\x1b[2mSuites with errors: \x1b[0m\x1b[33m${totalFailed}\x1b[0m`); } if (totalDiffs === 0) { (0, utils_1.printColorText)('\nVisual regression passed across all suites! (No diffs found)', '32'); } }; exports.summarizeSuiteQueue = summarizeSuiteQueue;