Подтвердить что ты не робот

Жасмин вызывает .length и callCount undefined

Я пытаюсь протестировать расширение chrome с помощью Jasmine, но мне не удается заставить calls.length и callCount вести себя так, как ожидалось. Оба случая возвращают undefined.

Я включил образец кода и спецификацию. Здесь остальная часть кода, если это помогает: 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);
    })
  })
})

ЦСИ/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)
      }
    }
  },

  ...
}
4b9b3361

Ответ 1

API Jasmine немного изменились в серии "2.x".
В соответствии с последними документами вы должны использовать метод count():

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

Я также пробовал, чтобы ваш код и все тесты прошли успешно.

Ответ 2

Альтернативный синтаксис (с более приятным выходом при сбое) будет

expect(kamikaze.closeIdleTab).toHaveBeenCalledTimes(3);