tap.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /**
  2. * Module dependencies.
  3. */
  4. var Base = require('./base');
  5. /**
  6. * Expose `TAP`.
  7. */
  8. exports = module.exports = TAP;
  9. /**
  10. * Initialize a new `TAP` reporter.
  11. *
  12. * @api public
  13. * @param {Runner} runner
  14. */
  15. function TAP(runner) {
  16. Base.call(this, runner);
  17. var n = 1;
  18. var passes = 0;
  19. var failures = 0;
  20. runner.on('start', function() {
  21. var total = runner.grepTotal(runner.suite);
  22. console.log('%d..%d', 1, total);
  23. });
  24. runner.on('test end', function() {
  25. ++n;
  26. });
  27. runner.on('pending', function(test) {
  28. console.log('ok %d %s # SKIP -', n, title(test));
  29. });
  30. runner.on('pass', function(test) {
  31. passes++;
  32. console.log('ok %d %s', n, title(test));
  33. });
  34. runner.on('fail', function(test, err) {
  35. failures++;
  36. console.log('not ok %d %s', n, title(test));
  37. if (err.stack) {
  38. console.log(err.stack.replace(/^/gm, ' '));
  39. }
  40. });
  41. runner.on('end', function() {
  42. console.log('# tests ' + (passes + failures));
  43. console.log('# pass ' + passes);
  44. console.log('# fail ' + failures);
  45. });
  46. }
  47. /**
  48. * Return a TAP-safe title of `test`
  49. *
  50. * @api private
  51. * @param {Object} test
  52. * @return {String}
  53. */
  54. function title(test) {
  55. return test.fullTitle().replace(/#/g, '');
  56. }