UNPKG

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