UNPKG

jasmine-reporters

Version:
145 lines (128 loc) 4.82 kB
(function() { if (! jasmine) { throw new Exception("jasmine library does not exist in global namespace!"); } /** * Basic reporter that outputs spec results to the browser console. * Useful if you need to test an html page and don't want the TrivialReporter * markup mucking things up. * * Usage: * * jasmine.getEnv().addReporter(new jasmine.ConsoleReporter()); * jasmine.getEnv().execute(); */ var ConsoleReporter = function() { this.started = false; this.finished = false; }; ConsoleReporter.prototype = { reportRunnerResults: function(runner) { if (this.hasGroupedConsole()) { var suites = runner.suites(); startGroup(runner.results(), 'tests'); for (var i=0; i<suites.length; i++) { if (!suites[i].parentSuite) { suiteResults(suites[i]); } } console.groupEnd(); } else { var dur = (new Date()).getTime() - this.start_time; var failed = this.executed_specs - this.passed_specs; var spec_str = this.executed_specs + (this.executed_specs === 1 ? " spec, " : " specs, "); var fail_str = failed + (failed === 1 ? " failure in " : " failures in "); this.log("Runner Finished."); this.log(spec_str + fail_str + (dur/1000) + "s."); } this.finished = true; }, hasGroupedConsole: function() { var console = jasmine.getGlobal().console; return console && console.info && console.warn && console.group && console.groupEnd && console.groupCollapsed; }, reportRunnerStarting: function(runner) { this.started = true; if (!this.hasGroupedConsole()) { this.start_time = (new Date()).getTime(); this.executed_specs = 0; this.passed_specs = 0; this.log("Runner Started."); } }, reportSpecResults: function(spec) { if (!this.hasGroupedConsole()) { var resultText = "Failed."; if (spec.results().skipped ) { resultText = 'Skipped.'; } else if (spec.results().passed()) { this.passed_specs++; resultText = "Passed."; } this.log(resultText); } }, reportSpecStarting: function(spec) { if (!this.hasGroupedConsole()) { this.executed_specs++; this.log(spec.suite.description + ' : ' + spec.description + ' ... '); } }, reportSuiteResults: function(suite) { if (!this.hasGroupedConsole()) { var results = suite.results(); this.log(suite.description + ": " + results.passedCount + " of " + results.totalCount + " passed."); } }, log: function(str) { var console = jasmine.getGlobal().console; if (console && console.log) { console.log(str); } } }; function suiteResults(suite) { var results = suite.results(); startGroup(results, suite.description); var specs = suite.specs(); for (var i in specs) { if (specs.hasOwnProperty(i)) { specResults(specs[i]); } } var suites = suite.suites(); for (var j in suites) { if (suites.hasOwnProperty(j)) { suiteResults(suites[j]); } } console.groupEnd(); } function specResults(spec) { var results = spec.results(); startGroup(results, spec.description); var items = results.getItems(); for (var k in items) { if (items.hasOwnProperty(k)) { itemResults(items[k]); } } console.groupEnd(); } function itemResults(item) { if (item.passed && !item.passed()) { console.warn({actual:item.actual,expected: item.expected}); item.trace.message = item.matcherName; console.error(item.trace); } else { console.info('Passed'); } } function startGroup(results, description) { var consoleFunc = (results.passed() && console.groupCollapsed) ? 'groupCollapsed' : 'group'; console[consoleFunc](description + ' (' + results.passedCount + '/' + results.totalCount + ' passed, ' + results.failedCount + ' failures)'); } // export public jasmine.ConsoleReporter = ConsoleReporter; })();