Nodeunit:运行时/testing函数中抛出的错误是_silent_

使用NodeUnit的一个要点是编写新的函数并经常testing它们。 问题是,如果其中一个testing函数抛出一个错误(包括JS运行时错误),错误不会显示给用户。 这里是最简单的testing用例:(注意,abcd会导致运行时错误)

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(){ abcde = 100; return 10; } 

但是,testMe()可能是我正在开发的一个新函数。 一个未初始化的variables,或者任何东西 ,将会沉默。

通过uncaughtException事件将您自己的未捕获的exception处理添加到您的testing文件中:

 process.on('uncaughtException', function(err) { console.error(err.stack); }); 

或者通过创build一个域并向其添加process (或者testing使用的任何事件发布程序),以便可以捕获在使用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)