UNPKG

mocha-html-single-reporter

Version:

A simple reporter for mocha that publishes results as a single html file and can be viewed without a server

131 lines (121 loc) 6.45 kB
var mocha = require('mocha'); var SimpleMochaReporter = function () { var reportContent = `<html><head> <script type="text/javascript"> function showPopUp(el,msg) { var cvr = document.getElementById("cover"); var dlg = document.getElementById(el); document.getElementById("errormsg").innerText = msg; cvr.style.display = "block"; dlg.style.display = "block"; dlg.style.overflow = "auto"; if (document.body.style.overflow = "hidden") { cvr.style.width = "100%"; cvr.style.height = "100%"; } } function closePopUp(el) { var cvr = document.getElementById("cover") var dlg = document.getElementById(el) cvr.style.display = "none" dlg.style.display = "none" document.body.style.overflowY = "scroll" } </script> <style> #mochastyle { font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; width: 70%; border-collapse: collapse; } #mochastyle td, #mochastyle th { font-size: 1em; border: 1px solid rgb(10, 25, 114); padding: 3px 7px 2px 7px; } #mochastyle th { font-size: 1.1em; text-align: left; padding-top: 5px; padding-bottom: 4px; background-color: rgb(10, 25, 114); color: #ffffff; } #mochastyle tr.alt td { white-space:pre; color: #000000; background-color: #EAF2D3; } #dialog { position:absolute; top:50%; left:50%; width:800px; height:500px; background: white; border-style: block; margin-left:-400px; margin-top:-200px; } #cover { display: none; position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; background: gray; filter: alpha(Opacity = 50); opacity: 0.5; -moz-opacity: 0.5; -khtml-opacity: 0.5 } .button { background-color: rgb(10, 25, 114); border: none; color: white; padding: 10px; text-align: center; text-decoration: none; display: inline-block; font-size: 1.1em; margin: 2px 2px; } </style></head><body> <div id="cover" ></div> <div id="dialog" hidden > <br><div align="center" style='overflow-y: auto;'> <table id="mochastyle" style='table-layout:fixed;' border='1'> <th><b>Error Details</b></th> <tr id="errormsg"></tr> </table> </div> <br> <div align="center"><button class='button' align="center" onclick="closePopUp('dialog');">Close</a></div> </div> <table width='80%' align='center'><tr><th align='center'><h1>Test Report</h1></th></tr></table><table id="mochastyle" border='1' align='center' width='80%'><tr><th>Test Summary</th><th>Result</th><th>Duration</th></tr>`; var report = function (runner) { mocha.reporters.Base.call(this, runner); var passes = 0; var failures = 0; runner.on('pass', function (test) { passes++; reportContent = reportContent + `<tr><td>${test.fullTitle()}</td><td>Pass</td><td>${test.duration} ms</td></tr>`; console.log('pass: %s', test.fullTitle()); }); runner.on('fail', function (test, err) { failures++; var errorMsg = err.message.replace(/\\/g,"\\\\"); reportContent = reportContent + `<tr><td>${test.fullTitle()}</td><td><a href='#' background-color='red' onclick='showPopUp("dialog",\`` + `${errorMsg}` + `\`)'><font color='red'>Fail</font></button></td><td>${test.duration} ms</td></tr>`; console.log('fail: %s', test.fullTitle()); }); runner.on('end', function () { reportContent = reportContent + '</table></body></html>'; let fs = require('fs'); fs.writeFileSync("testreport.html", reportContent) console.log('summary: %d/%d', passes, passes + failures); }); } return report; } module.exports = SimpleMochaReporter();