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

时间:2013-11-14 07:14:01

标签: node.js mongodb unit-testing nodeunit

使用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()可能是我正在开发的新功能。未初始化的变量,或任何,将会沉默。

1 个答案:

答案 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)