Skip to content

Commit 6cd06f5

Browse files
committed
[New] allow TODO tests to be "ok" with env var TODO_IS_OK
1 parent d39cb8d commit 6cd06f5

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed

index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ module.exports = (function () {
6767
}());
6868

6969
function createHarness(conf_) {
70-
var results = new Results();
70+
var results = new Results({ todoIsOK: !!(process.env.TODO_IS_OK === '1') });
7171
if (!conf_ || conf_.autoclose !== false) {
7272
results.once('done', function () { results.close(); });
7373
}

lib/results.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ function invalidYaml(str) {
4141
return $exec(yamlIndicators, str) !== null;
4242
}
4343

44-
function encodeResult(res, count) {
44+
function encodeResult(res, count, todoIsOK) {
4545
var output = '';
46-
output += (res.ok ? 'ok ' : 'not ok ') + count;
46+
output += (res.ok || (todoIsOK && res.todo) ? 'ok ' : 'not ok ') + count;
4747
output += res.name ? ' ' + coalesceWhiteSpaces(res.name) : '';
4848

4949
if (res.skip) {
@@ -91,8 +91,9 @@ function encodeResult(res, count) {
9191
return output;
9292
}
9393

94-
function Results() {
95-
if (!(this instanceof Results)) { return new Results(); }
94+
function Results(options) {
95+
if (!(this instanceof Results)) { return new Results(options); }
96+
var opts = (arguments.length > 0 ? arguments[0] : options) || {};
9697
this.count = 0;
9798
this.fail = 0;
9899
this.pass = 0;
@@ -101,6 +102,7 @@ function Results() {
101102
this.tests = [];
102103
this._only = null;
103104
this._isRunning = false;
105+
this.todoIsOK = !!opts.todoIsOK;
104106
}
105107

106108
inherits(Results, EventEmitter);
@@ -197,7 +199,7 @@ Results.prototype._watch = function (t) {
197199
write('# ' + res + '\n');
198200
return;
199201
}
200-
write(encodeResult(res, self.count + 1));
202+
write(encodeResult(res, self.count + 1, self.todoIsOK));
201203
self.count++;
202204

203205
if (res.ok || res.todo) {

test/todo.js

+38
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
var tap = require('tap');
44
var tape = require('../');
55
var concat = require('concat-stream');
6+
var mockProperty = require('mock-property');
67

78
var common = require('./common');
89
var stripFullStack = common.stripFullStack;
@@ -42,3 +43,40 @@ tap.test('tape todo test', function (assert) {
4243
t.end();
4344
});
4445
});
46+
47+
tap.test('tape todo test with TODO_IS_OK', function (assert) {
48+
assert.teardown(mockProperty(process.env, 'TODO_IS_OK', { value: '1' }));
49+
var test = tape.createHarness({ exit: false });
50+
assert.plan(1);
51+
52+
test.createStream().pipe(concat(function (body) {
53+
assert.deepEqual(stripFullStack(body.toString('utf8')), [
54+
'TAP version 13',
55+
'# success',
56+
'ok 1 this test runs',
57+
'# TODO failure',
58+
'ok 2 should never happen # TODO',
59+
' ---',
60+
' operator: fail',
61+
' at: Test.<anonymous> ($TEST/todo.js:$LINE:$COL)',
62+
' ...',
63+
'',
64+
'1..2',
65+
'# tests 2',
66+
'# pass 2',
67+
'',
68+
'# ok',
69+
''
70+
]);
71+
}));
72+
73+
test('success', function (t) {
74+
t.equal(true, true, 'this test runs');
75+
t.end();
76+
});
77+
78+
test('failure', { todo: true }, function (t) {
79+
t.fail('should never happen');
80+
t.end();
81+
});
82+
});

0 commit comments

Comments
 (0)