我正在为 Angular 指令进行 Jasmine 单元测试。我有一个在我的指令中使用的父函数,如何测试它?我的代码如下:
-
这是我指令的一半:
link: function (scope, element, attrs, ngModelCtrl){ scope.cancel=function(){ scope.deleteConfig=false; scope.$parent.$parent.deleteMode=false; $('#window-block').remove(); $('#confirm-delete-modal').remove(); }; scope.submit = function(){ scope.deleteConfig=false; scope.$parent.$parent.deleteMode=false; scope.$parent.deleteModeConfig(scope.analytic,scope.config); $('#window-block').remove(); $('#confirm-delete-modal').remove(); };
-
这是我对这段代码的单元测试的一部分:
it('should remove modal on cancel', function() { isolatedScope.cancel(); }); it('should submit modal on submit', function() { isolatedScope.submit(); });
结束是第一个取消函数通过测试,但提交函数失败,错误是:未定义不是构造函数(评估'scope.$parent.deleteModeConfig(scope.analytic,scope.config)')
有人可以帮助我吗?谢谢!
没有回答,但不得不说:使用父范围不是一个很好的做法。您应该隔离范围并通过属性给出一个函数来操作该属性。如果要操作许多属性,则通过包含所有必要函数的属性传递单个对象。当你测试它时,你只是给出方法/配置对象的模拟并验证调用
答:在代码中测试它的方式是创建父范围的模拟,其中包含父范围本身的属性,该属性包含要检查的属性。