console-runner.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /**
  2. Jasmine Reporter that outputs test results to the browser console.
  3. Useful for running in a headless environment such as PhantomJs, ZombieJs etc.
  4. Usage:
  5. // From your html file that loads jasmine:
  6. jasmine.getEnv().addReporter(new jasmine.ConsoleReporter());
  7. jasmine.getEnv().execute();
  8. */
  9. (function(jasmine, console) {
  10. if (!jasmine) {
  11. throw "jasmine library isn't loaded!";
  12. }
  13. var ANSI = {}
  14. ANSI.color_map = {
  15. "green" : 32,
  16. "red" : 31
  17. }
  18. ANSI.colorize_text = function(text, color) {
  19. var color_code = this.color_map[color];
  20. return "\033[" + color_code + "m" + text + "\033[0m";
  21. }
  22. var ConsoleReporter = function() {
  23. if (!console || !console.log) { throw "console isn't present!"; }
  24. this.status = this.statuses.stopped;
  25. };
  26. var proto = ConsoleReporter.prototype;
  27. proto.statuses = {
  28. stopped : "stopped",
  29. running : "running",
  30. fail : "fail",
  31. success : "success"
  32. };
  33. proto.reportRunnerStarting = function(runner) {
  34. this.status = this.statuses.running;
  35. this.start_time = (new Date()).getTime();
  36. this.executed_specs = 0;
  37. this.passed_specs = 0;
  38. this.log("Starting...");
  39. };
  40. proto.reportRunnerResults = function(runner) {
  41. var failed = this.executed_specs - this.passed_specs;
  42. var spec_str = this.executed_specs + (this.executed_specs === 1 ? " spec, " : " specs, ");
  43. var fail_str = failed + (failed === 1 ? " failure in " : " failures in ");
  44. var color = (failed > 0)? "red" : "green";
  45. var dur = (new Date()).getTime() - this.start_time;
  46. this.log("");
  47. this.log("Finished");
  48. this.log("-----------------");
  49. this.log(spec_str + fail_str + (dur/1000) + "s.", color);
  50. this.status = (failed > 0)? this.statuses.fail : this.statuses.success;
  51. /* Print something that signals that testing is over so that headless browsers
  52. like PhantomJs know when to terminate. */
  53. this.log("");
  54. this.log("ConsoleReporter finished");
  55. };
  56. proto.reportSpecStarting = function(spec) {
  57. this.executed_specs++;
  58. };
  59. proto.reportSpecResults = function(spec) {
  60. if (spec.results().passed()) {
  61. this.passed_specs++;
  62. return;
  63. }
  64. var resultText = spec.suite.description + " : " + spec.description;
  65. this.log(resultText, "red");
  66. var items = spec.results().getItems()
  67. for (var i = 0; i < items.length; i++) {
  68. var trace = items[i].trace.stack || items[i].trace;
  69. this.log(trace, "red");
  70. }
  71. };
  72. proto.reportSuiteResults = function(suite) {
  73. if (!suite.parentSuite) { return; }
  74. var results = suite.results();
  75. var failed = results.totalCount - results.passedCount;
  76. var color = (failed > 0)? "red" : "green";
  77. this.log(suite.getFullName() + ": " + results.passedCount + " of " + results.totalCount + " passed.", color);
  78. };
  79. proto.log = function(str, color) {
  80. var text = (color != undefined)? ANSI.colorize_text(str, color) : str;
  81. console.log(text)
  82. };
  83. jasmine.ConsoleReporter = ConsoleReporter;
  84. })(jasmine, console);