web-dev-qa-db-ja.com

ジャスミンのcalls.lengthとcallCountは未定義です

chrome Jasmine を使用した拡張機能をテストしようとしていますが、calls.lengthcallCountが期待どおりに動作するのに問題があります。 。どちらの場合もundefinedを返します。

コードと仕様のサンプルを含めました。それが役立つ場合の残りのコードは次のとおりです: https://github.com/DruRly/kamikaze/tree/closeIdleTab

再現方法:

  • 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

Jasmine APIは、2.xバージョンの「シリーズ」で少し変更されています。
最新のドキュメントによると、count()メソッドを使用する必要があります:

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

私もあなたのコードでそれを試しました、そしてすべてのテストは成功しました。

54
gkalpak

代替構文(失敗時の出力が少し良い)は

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