Ale*_*lex 11 javascript unit-testing karma-jasmine
我有一个试图测试的功能:
vm.clearArray = function(){
for (var id=0; id<vm.copyArray.length;id++){
vm.styleIcon(vm.copyArray[id],'black')
}
vm.copyObjArray = [];
vm.copyArray = [];
}
Run Code Online (Sandbox Code Playgroud)
我试着测试它像:
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([]);
});
Run Code Online (Sandbox Code Playgroud)
如果我取消注释上述内容,我会收到错误,并且我的覆盖率报告中从未涵盖过vm.styleIcon调用.通过将copyArray设置为包含数组中的值,我认为for循环将在运行测试时触发.情况似乎并非如此.
谢谢.
循环的代码看起来不错,所以我认为该属性vm.copyArray可能根本没有设置。如果加上一个console.log(vm.copyArray),结果是什么?
也许 vm 和$componentController('copy', null)不是对同一对象的引用,而是通过某个库调用彼此的函数?除了使用之外,还有其他方法可以vm从测试脚本中引用吗$componentController('copy', null)?
当您将数组作为参数传递到函数中时,必须触发循环。当然,除非vm.copyArray在实际代码中作为参数传递,否则您的实际代码将会失败,但它会显示循环是否有问题,或者测试脚本中对虚拟机的引用是否有问题:
//tested function
vm.clearArray = function(copyArray){
for (var id=0; id<copyArray.length;id++){
vm.styleIcon(copyArray[id],'black')
}
}
//test
ctrl.clearArray([123]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |