2015-09-02 73 views
0

我需要用Jasmine 2.0測試每個控制器中的聽衆,這個問題真的只是爲了加強我的邏輯,也許有一種更優雅的方式來接近測試聽衆,或者我也可以徹底!用茉莉花測試多個聽衆

這對codereview來說可能是一個更好的問題,但我會把它留在這裏。如何正確測試控制器中的多個按鍵/事件監聽器?

it("should trigger the correct actions from key events", function() { 
    var listenerSpy = jasmine.createSpy('listenerSpy'); 
    angular.forEach(scope.$$listeners, function (fn, eventName) { 
     listenerSpy(eventName, fn); 
     expect(listenerSpy).toHaveBeenCalledWith(eventName, fn); 
    }); 
}); 

回答

1

上面的內容並非真正測試JavaScript本身以外的其他任何東西。你正在調用一個函數,然後期待你剛纔調用了這個函數。

代碼覆蓋率報告會顯示監聽器函數根本沒有執行。

沒有看到您正在測試的代碼,我無法就如何構建測試給出正確的建議。

有兩種可能的意圖:

1)你想測試的範圍正在聽一組已知的元素? 2)你想測試聽衆執行的結果嗎?

通常,最好採取第二條路徑,因爲有了它,你也可以獲得第一名。

您的所有聽衆是否執行相同的操作?

如果是,則可以通過遍歷已知元素的列表並更改它們來驗證正確的偵聽器執行輸出。

如果偵聽器的執行方式不同,則應評估每個執行的輸出。

+0

每個監聽器都是$ scope。$上有一個回調,它是控制器作用域中的一個私有函數,$$ listeners返回一個對象,其中鍵是函數,value是事件名稱。這只是測試每個偵聽器是否正確執行它們各自的回調。 – iamwhitebox

+0

該測試與spyOn(angular,'noop')相同; angular.noop(someVar);期望(angular.noop).toHaveBeenCalledWith(someVar); –

+0

正確,所以我想問題是,如何測試某個函數是否實際被遞歸調用 – iamwhitebox