UNPKG

2.41 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}