Jasmine calls.length和callCount未定义

时间:2014-01-07 13:12:03

标签: javascript google-chrome-extension jasmine bdd jasmine2.0

我正在尝试使用Jasmine测试我的Chrome扩展程序,但我无法让calls.lengthcallCount按预期行事。两种情况都返回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);
    })
  })
})

的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)
      }
    }
  },

  ...
}

2 个答案:

答案 0 :(得分:54)

Jasmine API在2.x版“系列”中有所改变 根据 latest docs ,您应该使用count()方法:

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

我也尝试使用您的代码并且所有测试都成功通过。

答案 1 :(得分:4)

替代语法(失败时输出更好)将是

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