Разрешение тестам chai/mocha отображать ошибки для обработки.

Я пишу модуль узла, который отлавливает неперехваченные ошибки верхнего уровня, и хочу написать для него несколько тестов. К сожалению, мой любимый фреймворк, кажется, имеет некоторые проблемы с преднамеренным генерированием и перехватом неперехваченных исключений.

Если я выбрасываю исключение, оно выдает ошибку и не проходит тест.

Если я выбрасываю и ловлю ошибку, она никогда не переходит в process.on('uncaughtException')

Код банкомата, который не работает

it('Catches errors and return the user and line number', function(done) {
  blame.init(function (res) {
      console.log('\n\n', res, '\n\n');
    expect(true).should.equal(true);
    done();
  });

  expect(function () {
    undefinedFunction();
  }).to.throw('undefinedFunction is not defined');
});

person Neablis    schedule 10.03.2015    source источник
comment
возможный дубликат Как проверить неперехваченные ошибки в мокко?   -  person Louis    schedule 11.03.2015


Ответы (1)


@Louis Спасибо за пост. Не совсем полное исправление, но нужно было использовать удаление и добавление методов прослушивания событий.

Окончательное решение

function throwNextTick(error) {
    process.nextTick(function () {
        // DO NOT MOVE FROM LINE 7
        undefinedFunction();
    })
}

describe("tattletales", function (next) {
    it("Throw a error and catch it", function (next) {
        //Removing and saving the default process handler
        var recordedError = null;
        var originalException =        process.listeners('uncaughtException').pop();
        process.removeListener('uncaughtException', originalException);

        blame.init(function (err, res) {
          // Removing the process handler my blame added
          var newException =     process.listeners('uncaughtException').pop();
          process.removeListener('uncaughtException', newException);

          // Putting back on mochas process handler
          process.listeners('uncaughtException').push(originalException);

          assert.equal(res.error, 'ReferenceError: undefinedFunction is not defined');
          next();
       });
       throwNextTick();
   })
})
person Neablis    schedule 14.03.2015