我正在尝试使用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)
          }
        }
      },
    
      ...
    }
    

    最佳答案

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

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

    我还尝试使用您的代码,所有测试均成功通过。

    09-25 19:11