2014-01-07 10 views
31

Я пытаюсь проверить расширение chrome с помощью Jasmine, но у меня возникли проблемы с получением calls.length и callCount, чтобы вести себя так, как ожидалось. Оба случая возвращают undefined.Жасмин 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);