UNPKG

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