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

Mer*_*erc 8 unit-testing mongodb node.js nodeunit

使用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;
}
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*yHK 13

通过以下uncaughtException事件将您自己未捕获的异常处理添加到测试文件中:

process.on('uncaughtException', function(err) {
  console.error(err.stack);
});
Run Code Online (Sandbox Code Playgroud)

或者通过创建域并添加process它(或者您的测试使用的任何事件发射器),以便您可以捕获在使用中发生的错误process.nextTick:

var dom = require('domain').create();
dom.add(process);
dom.on('error', function(err) {
    console.error(err.stack);
});
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,您将获得如下控制台输出:

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)
Run Code Online (Sandbox Code Playgroud)

  • 是啊!他们真的应该将它构建到Nodeunit中. (2认同)