From b82b75fbf4a9106f0f38bde063b755ec3f434167 Mon Sep 17 00:00:00 2001 From: Vaibhav Singh Date: Tue, 4 Apr 2023 18:22:52 +0530 Subject: [PATCH] feat: add support for dynamic filename for HTML Report (#3667) --- lib/reporter/global-reporter.js | 3 +- lib/reporter/reporters/html.js | 23 +++++++++++--- lib/settings/defaults.js | 5 ++- test/src/runner/testReporter.js | 6 ++-- test/src/runner/testRunnerHtmlOutput.js | 41 +++++++++++++++++++++++++ 5 files changed, 70 insertions(+), 8 deletions(-) diff --git a/lib/reporter/global-reporter.js b/lib/reporter/global-reporter.js index a01b8896ba..48a8c60cb4 100644 --- a/lib/reporter/global-reporter.js +++ b/lib/reporter/global-reporter.js @@ -231,7 +231,7 @@ module.exports = class GlobalReporter { } async writeReport(reporter, globalResults) { - const {globals, output_folder, start_session, folder_format} = this.settings; + const {globals, output_folder, start_session, folder_format, reporter_options: {filename_format}} = this.settings; const needsCallback = reporter.write.length === 3; const options = { filename_prefix: this.settings.report_prefix, @@ -241,6 +241,7 @@ module.exports = class GlobalReporter { start_session, reporter, openReport: this.openReport, + filename_format, folder_format }; diff --git a/lib/reporter/reporters/html.js b/lib/reporter/reporters/html.js index b7f0e3c479..0e4387e19d 100644 --- a/lib/reporter/reporters/html.js +++ b/lib/reporter/reporters/html.js @@ -38,6 +38,20 @@ class HtmlReporter extends BaseReporter { return folderPrefix; } + getFileName() { + let fileName = 'index'; + const {filename_format} = this.options; + if (filename_format) { + if (typeof filename_format === 'function') { + fileName = filename_format(this.results); + } else if (typeof filename_format === 'string') { + fileName = filename_format; + } + } + + return fileName; + } + computePassedAndFailedCounts(module) { const result = {passedCount: 0, failedCount: 0}; @@ -230,16 +244,17 @@ class HtmlReporter extends BaseReporter { const shouldOpenReport = this.options.openReport; const destFolder = path.join(output_folder, this.getFolderPrefix(), 'nightwatch-html-report'); - const filename = path.join(destFolder, 'index.html'); + const fileName = `${this.getFileName()}.html`; + const filePath = path.join(destFolder, `${this.getFileName()}.html`); const jsonString = JSON.stringify(results); - HtmlReact.writeNightwatchHTMLReport(destFolder, jsonString); + HtmlReact.writeNightwatchHTMLReport(destFolder, fileName, jsonString); - Logger.logDetailedMessage(Logger.colors.stack_trace(` Wrote HTML report file to: ${path.resolve(filename)}` + '\n'), 'info'); + Logger.logDetailedMessage(Logger.colors.stack_trace(` Wrote HTML report file to: ${path.resolve(filePath)}` + '\n'), 'info'); if (shouldOpenReport) { - return this.openReporter(filename); + return this.openReporter(filePath); } } diff --git a/lib/settings/defaults.js b/lib/settings/defaults.js index b9423adc8e..a5de5171c0 100644 --- a/lib/settings/defaults.js +++ b/lib/settings/defaults.js @@ -143,7 +143,10 @@ module.exports = { output_folder: 'tests_output', //The folder formatting to use while saving HTML report - folder_format: null + folder_format: null, + + // The file name formatting to use while saving HTML report + filename_format: null }, // A string or array of folders (excluding subfolders) where the tests are located. diff --git a/test/src/runner/testReporter.js b/test/src/runner/testReporter.js index 05bb33c3f1..4f5a15ea15 100644 --- a/test/src/runner/testReporter.js +++ b/test/src/runner/testReporter.js @@ -113,7 +113,8 @@ describe('testReporter', function() { done(); } }, - output_folder: 'output' + output_folder: 'output', + reporter_options: {} }); return reporter.writeReportToFile().then(function(result) { @@ -385,7 +386,8 @@ describe('testReporter', function() { done(); } }, - output_folder: 'output' + output_folder: 'output', + reporter_options: {} }); return reporter.writeReportToFile().then(function(result) { diff --git a/test/src/runner/testRunnerHtmlOutput.js b/test/src/runner/testRunnerHtmlOutput.js index f29026dcc1..04324aca00 100644 --- a/test/src/runner/testRunnerHtmlOutput.js +++ b/test/src/runner/testRunnerHtmlOutput.js @@ -177,4 +177,45 @@ describe('testRunnerHTMLOutput', function() { then(_ => { }); }); + + it('test html report file with a file format function', function () { + + const testsPath = [ + path.join(__dirname, '../../sampletests/withfailures') + ]; + + MockServer.addMock({ + url: '/wd/hub/session/1352110219202/screenshot', + method: 'GET', + response: JSON.stringify({ + sessionId: '1352110219202', + status: 0, + value: 'fakedata' + }) + }, true); + + + return runTests({source: testsPath, reporter: 'html'}, settings({ + output_folder: outputPath, + globals: { + waitForConditionPollInterval: 20, + waitForConditionTimeout: 50, + retryAssertionTimeout: 50, + reporter: function () { + } + }, + reporter_options: { + filename_format: function() { + return 'test_report'; + } + } + })) + .then(_ => { + return readFilePromise(`${outputPath}${path.sep}nightwatch-html-report${path.sep}test_report.html`); + }). + then(_ => { + }).catch((err) => { + console.log(err); + }); + }); });