UNPKG

testcafe-reporter-nunit3

Version:

NUnit 3 TestCafe reporter plugin that supports screenshot attachments.

124 lines 5.75 kB
"use strict"; var fs_1 = require("fs"); var Handlebars = require("handlebars"); var path = require("path"); var template = Handlebars.compile((0, fs_1.readFileSync)(path.join(__dirname, 'template.handlebars'), 'utf-8')); var TaskData = (function () { function TaskData(startTime) { this.startTime = startTime; this.fixtures = []; } TaskData.prototype.handleFixtureStart = function (name, path, meta) { this.currentFixture = new FixtureData(name, path, meta); this.fixtures.push(this.currentFixture); }; TaskData.prototype.handleTestStart = function (name, meta) { }; TaskData.prototype.handleTestDone = function (name, testRunInfo, meta, formattedErrorMessage) { if (formattedErrorMessage === void 0) { formattedErrorMessage = ''; } this.currentFixture.endTime = new Date().toISOString(); this.currentFixture.testCases.push(new TestCaseData(name, testRunInfo, meta, formattedErrorMessage)); }; TaskData.prototype.handleTaskDone = function (endTime, passed, warnings, result) { this.endTime = endTime; }; return TaskData; }()); var FixtureData = (function () { function FixtureData(name, path, meta) { this.name = name; this.path = path; this.meta = meta; this.startTime = new Date().toISOString(); this.testCases = []; this.hasMetadata = this.meta && Object.keys(this.meta).length > 0; } return FixtureData; }()); var TestCaseData = (function () { function TestCaseData(name, testRunInfo, meta, formattedErrorMessage) { var _a; this.name = name; this.testRunInfo = testRunInfo; this.meta = meta; this.formattedErrorMessage = formattedErrorMessage; this.result = testRunInfo.skipped ? 'Skipped' : testRunInfo.errs.length > 0 ? 'Failed' : testRunInfo.unstable ? 'Inconclusive' : 'Passed'; this.errorMessage = this.formattedErrorMessage.replace(/[\s\u2800]*Browser.*?([\n\u2800]*❌|$)/gs, function ($0, $1) { return $1; }); if (testRunInfo.screenshots) { this.attachmentPaths = testRunInfo.screenshots.map(function (screenshot) { return screenshot.screenshotPath; }); } if (testRunInfo.videos) { this.attachmentPaths = ((_a = this.attachmentPaths) !== null && _a !== void 0 ? _a : []).concat(testRunInfo.videos.map(function (video) { return video.videoPath; })); } if (testRunInfo.quarantine && Object.entries(testRunInfo.quarantine).length > 1) { if (this.errorMessage) { this.errorMessage += '\n\n'; } this.errorMessage += Object.entries(testRunInfo.quarantine) .map(function (_a) { var runNumber = _a[0], passedObject = _a[1]; return "Run ".concat(runNumber, ": ").concat(passedObject.passed ? 'Passed' : 'Failed'); }) .join('\n'); } if (testRunInfo.warnings && testRunInfo.warnings.length > 0) { this.formattedErrorMessage += '\n' + testRunInfo.warnings.join('\n'); } this.duration = testRunInfo.durationMs / 1000; this.hasFailureData = !!this.errorMessage || !!this.formattedErrorMessage; this.hasMetadata = this.meta && Object.keys(this.meta).length > 0; } return TestCaseData; }()); module.exports = function () { return { noColors: true, taskData: null, cleanupPrematureExit: null, addFailedCompletionCheck: function () { var completionCheckName = 'TEST RAN TO COMPLETION CHECK'; this.taskData.handleTestStart(completionCheckName, {}); this.taskData.handleTestDone(completionCheckName, { durationMs: 0, errs: [{}], quarantine: [], screenshotPath: '', skipped: false, unstable: false, warnings: [], }, {}, 'Process exited prior to all tests finishing.'); }, writeAllData: function () { this.write(template(this.taskData)); }, reportTaskStart: function (startTime, userAgents, testCount) { var _this = this; this.taskData = new TaskData(startTime.toISOString()); this.cleanupPrematureExit = function () { _this.addFailedCompletionCheck(); _this.writeAllData(); }; process.on('exit', this.cleanupPrematureExit); }, reportFixtureStart: function (name, path, meta) { this.taskData.handleFixtureStart(this.escapeHtml(name), path, meta); }, reportTestStart: function (name, meta) { this.taskData.handleTestStart(name, meta); }, reportTestDone: function (name, testRunInfo, meta) { var _this = this; var errorDetails = testRunInfo.errs.map(function (err) { return _this.formatError(err, '❌ '); }).join('\n\n') || ''; var withoutScreenshot = errorDetails.replace(/^\s*Screenshot:.*\n?$/gm, ''); var u2800SpacingHack = withoutScreenshot .replace(/^[^\S\r\n][^\S\r\n]([\s\d>]+\|)/gm, function ($0, $1, $2) { return '\u2800' + $1; }) .replace(/\n\n/g, '\n\u2800\n'); this.taskData.handleTestDone(this.escapeHtml(name), testRunInfo, meta, u2800SpacingHack); }, reportTaskDone: function (endTime, passed, warnings, result) { this.taskData.handleTaskDone(endTime.toISOString(), passed, warnings, result); process.off('exit', this.cleanupPrematureExit); this.writeAllData(); }, }; }; //# sourceMappingURL=index.js.map