【发布时间】:2017-08-01 10:38:14
【问题描述】:
我有一个正在尝试测试的函数:
vm.clearArray = function(){
for (var id=0; id<vm.copyArray.length;id++){
vm.styleIcon(vm.copyArray[id],'black')
}
vm.copyObjArray = [];
vm.copyArray = [];
}
我正在尝试像这样测试它:
it('should have cleared copyArray on function call', function(){
var ctrl = $componentController('copy', null);
spyOn(ctrl, 'clearArray').and.callThrough();
spyOn(ctrl, 'styleIcon').and.callThrough();
ctrl.copyArray = [123];
ctrl.clearArray();
expect(ctrl.clearArray).toHaveBeenCalled();
// expect(ctrl.styleIcon).toHaveBeenCalled();
expect(ctrl.copyObjArray).toEqual([]);
expect(ctrl.copyArray).toEqual([]);
});
如果我取消对上述预期的注释,我会收到一个错误,并且 vm.styleIcon 调用从未包含在我的覆盖率报告中。通过将 copyArray 设置为在数组中包含一个值,我认为 for 循环会在运行测试时触发。好像不是这样的。
谢谢。
【问题讨论】:
-
你必须
spyOnstyleIcon()函数吗? -
是的@Pointy,如果我在其中添加它仍然失败。
-
在循环内设置断点并检查指令是否被调用。
-
我不确定,但请尝试移动 ctrl.copyArray = [123];就在 var ctrl = $componentController('copy', null); 之后
标签: javascript unit-testing karma-jasmine