jasmine-list-reporter.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const { TerminalReporter } = require('jasmine-tagged');
  2. class JasmineListReporter extends TerminalReporter {
  3. fullDescription(spec) {
  4. return getFullDescription(spec, true);
  5. }
  6. reportSpecStarting(spec) {
  7. this.print_(this.fullDescription(spec) + ' ');
  8. }
  9. reportSpecResults(spec) {
  10. const result = spec.results();
  11. if (result.skipped) {
  12. return;
  13. }
  14. let msg = '';
  15. if (result.passed()) {
  16. msg = "\u001b[34m[pass]\u001b[0m";
  17. } else {
  18. msg = "\u001b[1m\u001b[31m[FAIL]\u001b[0m";
  19. this.flatFailures ||= [];
  20. this.flatFailures.push(getFullDescription(spec, false))
  21. this.addFailureToFailures_(spec);
  22. }
  23. this.printLine_(msg);
  24. }
  25. reportFailures_(spec) {
  26. super.reportFailures_(spec);
  27. if(this.flatFailures && this.flatFailures.length > 0) {
  28. this.printLine_("\n\nALL TESTS THAT FAILED:")
  29. for(let failure of this.flatFailures) {
  30. this.printLine_(failure)
  31. }
  32. }
  33. }
  34. }
  35. function getFullDescription(spec, tokens) {
  36. let fullDescription = spec.description;
  37. if(tokens) fullDescription = `it ${fullDescription}`;
  38. let currentSuite = spec.suite;
  39. while (currentSuite) {
  40. if(tokens) {
  41. fullDescription = `${currentSuite.description} > ${fullDescription}`;
  42. } else {
  43. fullDescription = `${currentSuite.description} ${fullDescription}`;
  44. }
  45. currentSuite = currentSuite.parentSuite;
  46. }
  47. return fullDescription;
  48. }
  49. module.exports = { JasmineListReporter, getFullDescription };