Вопрос

One of the points of using NodeUnit is to write new functions and test them often. Problem is, if one of the tested functions throws an error (including JS runtime errors), the error is not shown to the user. Here is the simplest possible test case: (Note that a.b.c.d will cause a runtime error)

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;
}

However, testMe() might be a new function I am developing. An uninitialised variable, or anything, will just fall silent.

Это было полезно?

Решение

Add your own uncaught exception handling to your test file either via the uncaughtException event:

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

Or by creating a domain and adding process to it (or whatever event emitter(s) your tests use) so that you can catch the errors that occur within your use of process.nextTick:

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

Either way, you'll then get console output that looks like:

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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top