web-dev-qa-db-fra.com

Jasmine calls.length et callCount ne sont pas définis

J'essaie de tester mon chrome avec Jasmine mais j'ai du mal à obtenir calls.length et callCount pour se comporter comme prévu. Les deux cas renvoient undefined.

J'ai inclus un échantillon du code et des spécifications. Voici le reste du code si cela aide: https://github.com/DruRly/kamikaze/tree/closeIdleTab

Comment reproduire:

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

spec/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)
      }
    }
  },

  ...
}
33
Dru

Les API Jasmine ont un peu changé dans la version "série" 2.x.
Selon la derniers documents, vous devez utiliser la méthode count():

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

J'ai également essayé cela avec votre code et tous les tests ont réussi.

54
gkalpak

Une syntaxe alternative (avec une sortie un peu plus agréable en cas d'échec) serait

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