end-as-callback.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. 'use strict';
  2. var tap = require('tap');
  3. var forEach = require('for-each');
  4. var tape = require('../');
  5. var concat = require('concat-stream');
  6. function fakeAsyncTask(name, cb) {
  7. cb(null, 'task' + name);
  8. }
  9. function fakeAsyncWrite(name, cb) {
  10. cb(null);
  11. }
  12. function fakeAsyncWriteFail(name, cb) {
  13. cb(new Error('fail'));
  14. }
  15. /**
  16. * extract the stack trace for the failed test.
  17. * this will change dependent on the environment
  18. * so no point hard-coding it in the test assertion
  19. * see: https://git.io/v6hGG for example
  20. * @param String rows - the tap output lines
  21. * @returns String stacktrace - just the error stack part
  22. */
  23. function getStackTrace(rows) {
  24. var stacktrace = ' ---\n';
  25. var extract = false;
  26. forEach(rows.toString('utf8').split('\n'), function (row) {
  27. if (!extract) {
  28. if (row.indexOf('---') > -1) { // start of stack trace
  29. extract = true;
  30. }
  31. } else if (row.indexOf('...') > -1) { // end of stack trace
  32. extract = false;
  33. stacktrace += ' ...';
  34. } else {
  35. stacktrace += row + '\n';
  36. }
  37. });
  38. // console.log(stacktrace);
  39. return stacktrace;
  40. }
  41. tap.test('tape assert.end as callback', function (tt) {
  42. var test = tape.createHarness({ exit: false });
  43. test.createStream().pipe(concat(function (rows) {
  44. tt.equal(rows.toString('utf8'), [
  45. 'TAP version 13',
  46. '# do a task and write',
  47. 'ok 1 null',
  48. 'ok 2 should be equal',
  49. '# do a task and write fail',
  50. 'ok 3 null',
  51. 'ok 4 should be equal',
  52. 'not ok 5 Error: fail',
  53. getStackTrace(rows), // tap error stack
  54. '',
  55. '1..5',
  56. '# tests 5',
  57. '# pass 4',
  58. '# fail 1'
  59. ].join('\n') + '\n');
  60. tt.end();
  61. }));
  62. test('do a task and write', function (assert) {
  63. fakeAsyncTask('foo', function (err, value) {
  64. assert.ifError(err);
  65. assert.equal(value, 'taskfoo');
  66. fakeAsyncWrite('bar', assert.end);
  67. });
  68. });
  69. test('do a task and write fail', function (assert) {
  70. fakeAsyncTask('bar', function (err, value) {
  71. assert.ifError(err);
  72. assert.equal(value, 'taskbar');
  73. fakeAsyncWriteFail('baz', assert.end);
  74. });
  75. });
  76. });