我正在尝试使用Jasmine测试我的Chrome扩展程序,但我无法让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);
})
})
})
的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)
}
}
},
...
}
答案 0 :(得分:54)
Jasmine API在2.x版“系列”中有所改变
根据 latest docs ,您应该使用count()
方法:
expect(kamikaze.closeIdleTab.calls.count()).toBe(3);
我也尝试使用您的代码并且所有测试都成功通过。
答案 1 :(得分:4)
替代语法(失败时输出更好)将是
expect(kamikaze.closeIdleTab).toHaveBeenCalledTimes(3);