UNPKG

jasmine-reporters

Version:
97 lines (83 loc) 3.31 kB
(function() { if (! jasmine) { throw new Exception("jasmine library does not exist in global namespace!"); } /** * TAP (http://en.wikipedia.org/wiki/Test_Anything_Protocol) reporter. * outputs spec results to the console. * * Heavily inspired by ConsoleReporter found at: * https://github.com/larrymyers/jasmine-reporters/ * * Usage: * * jasmine.getEnv().addReporter(new jasmine.TapReporter()); * jasmine.getEnv().execute(); */ var TapReporter = function() { this.started = false; this.finished = false; }; TapReporter.prototype = { reportRunnerStarting: function(runner) { this.started = true; this.start_time = (new Date()).getTime(); this.executed_specs = 0; this.passed_specs = 0; this.executed_asserts = 0; this.passed_asserts = 0; // should have at least 1 spec, otherwise it's considered a failure this.log('1..'+ Math.max(runner.specs().length, 1)); }, reportSpecStarting: function(spec) { this.executed_specs++; }, reportSpecResults: function(spec) { var resultText = "not ok"; var errorMessage = ''; var results = spec.results(); if (results.skipped) { return; } var passed = results.passed(); this.passed_asserts += results.passedCount; this.executed_asserts += results.totalCount; if (passed) { this.passed_specs++; resultText = "ok"; } else { var items = results.getItems(); var i = 0; var expectationResult, stackMessage; while (expectationResult = items[i++]) { if (expectationResult.trace) { stackMessage = expectationResult.trace.stack? expectationResult.trace.stack : expectationResult.message; errorMessage += '\n '+ stackMessage; } } } this.log(resultText +" "+ (spec.id + 1) +" - "+ spec.suite.description +" : "+ spec.description + errorMessage); }, reportRunnerResults: function(runner) { 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 "); var assert_str = this.executed_asserts + (this.executed_asserts === 1 ? " assertion, " : " assertions, "); if (this.executed_asserts) { this.log("# "+ spec_str + assert_str + fail_str + (dur/1000) + "s."); } else { this.log('not ok 1 - no asserts run.'); } this.finished = true; }, log: function(str) { var console = jasmine.getGlobal().console; if (console && console.log) { console.log(str); } } }; // export public jasmine.TapReporter = TapReporter; })();