2013-11-22 90 views
2

我正在開發一個JavaScript應用程序,它偵聽window.onerror()並向端點報告我和我的團隊正在構建。我正在使用grunt-contrib-jasmine進行單元測試,因爲我的測試用例期望錯誤被拋出,所以我遇到了問題。在Jasmine測試中處理javascript錯誤

當運行測試用例幻象,這個雜波我的輸出不必要的:http://cl.ly/image/1n3k3z2g2V2l

在引用錯誤的情況下,我的測試是這樣的:

it("should report reference errors", function() { 
    spyOn(window.fred, 'sendRequest').andCallFake(function(details) { 
     expect(details.type).toEqual('js-error'); 
     expect(details.message).toBeNonEmptyString(); 
    }); 
    runs(function() { 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.innerHTML = 'reference_error;'; 
     document.body.appendChild(script); 
    }); 

    waits(2000); 

    runs(function() { 
     expect(window.fred.sendRequest).toHaveBeenCalled(); 
    }); 
}); 

我希望能夠到處理在代碼中某處引發的ReferenceError。盡我所見,這發生在document.body.appendChild(script);間接。茉莉花的expect(fn).toThrow(e)看起來像它會做的工作,如果我在這裏使用它,但測試仍然失敗。我也試過圍繞它與try { ... } catch (err) { ... }但無濟於事。

我的問題,沒有人有任何建議如何處理這個?

回答

0

通常茉莉花會嘗試捕捉由您的規格拋出的任何異常,並將這些異常標記爲失敗。但是,因爲瀏覽器在嘗試解析腳本標記時拋出了此異常,所以jasmine不在調用堆棧中。這就是爲什麼toThrow不起作用。

此外,只要您的onerror方法返回true瀏覽器應該not do it's default error action,在這種情況下登錄到控制檯。