2015-10-16 28 views
2

我對使用摩卡相當陌生,並且遇到了這個錯誤。請幫我理解這種行爲。摩卡不捕捉未申報的變量

輸出看起來像這樣

inside content callback 
inside content callback 
inside content callback 

- 失敗測試!

問題 - 我不明白爲什麼儘管使用'嚴格使用'它不會抱怨描述沒有被聲明。

請注意:如果我做修改這

var description = ..... 

它的工作原理中提琴!我錯過了什麼嗎? 感謝您的時間!

回答

1

摩卡將報告試圖分配給未聲明的變量所引起的異常。如果我運行此:

"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不會阻止此異常到達執行上下文的頂部。換句話說,它不會吞噬異常。

如果您有拋出這個異常是由調用回調代碼吞下一個例外,但回調,你會得到一個測試超時,但你不會知道爲什麼,因爲摩卡將無法檢測異常。它依賴於uncaughtException event,如果異常被吞噬,則不會發射。

+0

我明白,回調吞下事件。但我不明白爲什麼「內容回調」顯示三次?爲什麼它繼續回來? –

+0

它取決於'contentUtils.loadContent'的實現,它不顯示。例如,如果回調被多次調用,那麼您將獲得多個輸出到控制檯。 – Louis

+0

真棒謝謝你! –