2015-10-16 3 views
2

Я довольно новичок в использовании мокко, и я столкнулся с этой ошибкой. Пожалуйста, помогите мне понять это поведение.Mocha не обнаруживает необъявленную переменную

Выход выглядит следующим образом

inside content callback 
inside content callback 
inside content callback 

- Отказ теста!

Вопрос: Я не понимаю, почему, несмотря на использование «строгого использования», он не жалуется, что описание не объявляется.

Обратите внимание: Если я изменить это

var description = ..... 

это работает альт! Я что-то упускаю? Спасибо за ваше время!

ответ

1

Mocha сообщит об исключении, вызванном попыткой присвоить необъявленную переменную. Если я запускаю это:

"use strict"; 

it("foo", function (done) { 
    setTimeout(function() { 
     description = "foo"; 
     done(); 
    }, 1000); 
}); 

Я получаю результат:

1) foo 

    0 passing (1s) 
    1 failing 

    1) foo: 
    Uncaught ReferenceError: description is not defined 
     at null._onTimeout (test.js:5:21) 

Теперь, я использовал setTimeout, который хорошо себя функцию в том, что, когда обратный вызов передается на него бросает исключение, setTimeout не помешает этому исключению достичь вершины контекста выполнения. Другими словами, он не проглатывает исключения.

Если у вас есть обратный вызов, который бросает исключение, но это исключение поглощено кодом, который называется обратным вызовом, вы получите тест тайм-аут, но вы не знаете, почему, потому что Mocha не сможет обнаружить исключение. Он полагается на uncaughtException event, который не испускается, если исключение проглочено.

+0

Я понимаю, что обратный вызов проглатывает событие. Но я не понимаю, почему «внутренний обратный вызов» отображается трижды? почему он продолжает возвращаться? –

+0

Это зависит от реализации 'contentUtils.loadContent', который вы не видите. Если, например, обратный вызов вызывается несколько раз, вы получаете несколько выходов на консоль. – Louis

+0

Огромное спасибо! –

Смежные вопросы