Skip to content

Commit 5a3362f

Browse files
author
cloudhead
committed
catch silent async failures on exit
1 parent 6546552 commit 5a3362f

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

lib/vows.js

+19-4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ vows.__defineGetter__('reporter', function () {
3333
});
3434

3535
var stylize = require('vows/console').stylize;
36+
var console = require('vows/console');
3637

3738
vows.inspect = require('vows/console').inspect;
3839
vows.prepare = require('vows/extras').prepare;
@@ -128,10 +129,24 @@ function addVow(vow) {
128129
// If not, report an error message.
129130
//
130131
process.addListener('exit', function () {
131-
if (vows.suites.filter(function (s) {
132-
return (s.results.total > 0) && (s.results.time === null)
133-
}).length > 0) {
134-
vows.reporter.report(['error', { error: "An EventEmitter has failed to fire.", type: 'promise' }]);
132+
var results = { honored: 0, broken: 0, errored: 0, pending: 0, total: 0 };
133+
134+
vows.suites.forEach(function (s) {
135+
if ((s.results.total > 0) && (s.results.time === null)) {
136+
vows.reporter.report(['error', { error: "Asynchronous Error", suite: s }]);
137+
process.exit(1);
138+
}
139+
s.batches.forEach(function (b) {
140+
if (b.status !== 'end') {
141+
results.errored ++;
142+
results.total ++;
143+
vows.reporter.report(['error', { error: "A callback hasn't fired", batch: b, suite: s }]);
144+
}
145+
Object.keys(results).forEach(function (k) { results[k] += b[k] });
146+
});
147+
});
148+
if (results.total) {
149+
sys.puts(console.result(results));
135150
}
136151
});
137152

lib/vows/console.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ this.result = function (event) {
6060
pending: '- ' + $('Pending').bold.cyan
6161
}[status] + ' » ';
6262

63-
if ('time' in event) {
63+
if (typeof(event.time) === 'number') {
6464
time = ' (' + event.time.toFixed(3) + 's)';
6565
time = this.stylize(time, 'grey');
6666
}

lib/vows/reporters/dot-matrix.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ this.report = function (data, s) {
5959
puts(console.result(event).join('\n'));
6060
break;
6161
case 'error':
62-
puts('\n\n * ' + stylize(event.error, 'red'));
62+
sys.puts('\n* ' + stylize(event.error + ' in ', 'red') + event.suite.subject);
6363
break;
6464
}
6565
};

0 commit comments

Comments
 (0)