2014-01-07 2 views
31

크롬 확장을 Jasmine으로 테스트하려고하는데 calls.lengthcallCount이 예상대로 작동하지 못합니다. 두 경우 모두 undefined을 반환합니다.Jasmine 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 것이다. 대부분의 사람들은 처음 2 줄 (문자 그대로) 후에 멈추었을 것입니다! (관련 코드, 전체 코드에 대한 링크 및 문제를 재현하는 단계 -이 답변에 매우 쉽다는 사실이 싫습니다.) – gkalpak

+0

Thanks @ Expert System! 내가 미쳐 가고있는 것처럼 느꼈다. 나는 아직도 있을지도 모르지만 나는 오래된 문서를보고 있었다. :) – Dru

+0

repo가 ​​여전히 참조 용으로 사용 가능하면 좋을 것이다. – Brant

답변

51

재스민 API는 2.X 버전 "시리즈"에서 조금 변경되었습니다. 당신이 count() 방법을 사용한다 latest docs에 따르면
는 :

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

나는 또한 코드와 모든 테스트를 성공적으로 통과 것을 시도했다. (실패 약간 더 좋은 출력)

1

대체 문법 질문의 품질 및 포맷

expect(kamikaze.closeIdleTab).toHaveBeenCalledTimes(3); 
관련 문제