2014-01-07 68 views
31

我試圖用Jasmine來測試我的Chrome擴展,但我無法使calls.lengthcallCount按預期運行。這兩種情況都會返回undefinedJasmine calls.length和callCount未定義

我已經包含了代碼示例和規範。下面的代碼的其餘部分,如果有幫助:https://github.com/DruRly/kamikaze/tree/closeIdleTab

如何重現:

  • git clone https://github.com/DruRly/kamikaze/tree/closeIdleTab
  • cd kamikaze
  • open SpecRunner.html

規格/ kamikazeSpec.js

describe("kamikaze", function() { 
    describe("closeIdleTabs", function(){ 
    it("calls closeIdleTab for each tab received", function(){ 
     spyOn(kamikaze, 'closeIdleTab'); 

     kamikaze.closeIdleTabs([1,2,3]); 
     expect(kamikaze.closeIdleTab.calls.length).toBe(3); 
    }) 
    }) 
}) 

的src/kamikaze.js

kamikaze = { 
    ... 

    closeIdleTabs: function(tabs){ 
    tabs.forEach(function(tab){ 
     test.closeIdleTab(tab); 
    }) 
    }, 

    closeIdleTab: function(tab){ 
    if(tabTimeStamps[tab.id]){ 
     var secondsSinceUpdated = getSecondsSinceUpdated(tab.id) 
     if(secondsSinceUpdated > (minutesUntilIdle * 60)){ 
     chrome.tabs.remove(tab.id) 
     } 
    } 
    }, 

    ... 
} 
+1

10的問題的質量和格式。大多數人會在前兩行(字面上)後停止! (相關代碼,鏈接到完整的代碼和步驟來重現問題 - 我討厭這個事實很容易回答這個:)) – gkalpak

+0

謝謝@ExpertSystem!感覺就像我瘋了一樣。我仍然可能會,但我也看着過時的文檔:) – Dru

+0

如果回購仍然可供參考,這將是很好的。 – Brant

回答

51

茉莉花API已在2.x版 「系列」 改了一下。
按照latest docs你應該使用count()方法:

expect(kamikaze.closeIdleTab.calls.count()).toBe(3); 

我也試着與你的代碼和所有測試成功通過。

1

替代語法(與故障位更好輸出)將是

expect(kamikaze.closeIdleTab).toHaveBeenCalledTimes(3); 
相關問題