使用NodeUnit的一个要点是编写新函数并经常测试它们。问题是,如果其中一个测试函数抛出错误(包括JS运行时错误),则不会向用户显示错误。 以下是最简单的测试用例:(注意a.b.c.d会导致运行时错误)
exports.all = {
one: function( test ){
test.done();
},
two: function( test ){
as( function( err, res ){
test.done();
});
},
}
function as( callback ){
process.nextTick( function() {
a = testMe();
callback( null, a );
});
}
function testMe(){
a.b.c.d.e = 100;
return 10;
}
但是,testMe()可能是我正在开发的新功能。未初始化的变量,或任何,将会沉默。
答案 0 :(得分:13)
通过uncaughtException
事件将您自己未捕获的异常处理添加到您的测试文件中:
process.on('uncaughtException', function(err) {
console.error(err.stack);
});
或者通过创建域并向其添加process
(或者您的测试使用的任何事件发射器),以便您可以捕获使用process.nextTick
时出现的错误:
var dom = require('domain').create();
dom.add(process);
dom.on('error', function(err) {
console.error(err.stack);
});
无论哪种方式,您都可以获得如下的控制台输出:
ReferenceError: a is not defined
at testMe (/home/test/test.js:24:3)
at /home/test/test.js:18:9
at process._tickDomainCallback (node.js:459:13)