8

使用 NodeUnit 的要点之一是编写新函数并经常对其进行测试。问题是,如果其中一个测试函数抛出错误(包括 JS 运行时错误),则错误不会显示给用户。这是最简单的测试用例:(注意 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(){
  a.b.c.d.e = 100;
  return 10;
}

但是,testMe() 可能是我正在开发的一个新功能。一个未初始化的变量,或者任何东西,都会沉默。

4

1 回答 1

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)
于 2013-11-18T02:06:53.837 回答