如何使用jasmine在指令中测试作用域父函数

时间:2016-03-16 20:52:49

标签: angularjs unit-testing jasmine parent directive

我正在为Angular指令进行Jasmine单元测试。我有一个在我的指令中使用的父函数,如何测试它?我的代码如下:

  1. 这是我指令的一半:

                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();
                };
    
  2. 这是我对这段代码进行单元测试的一部分:

    it('should remove modal on cancel', function() {
        isolatedScope.cancel();
    });
    
    it('should submit modal on submit', function() {
        isolatedScope.submit();
    });
    
  3. 结束是第一个通过测试的取消函数,但是submit函数失败了,错误是:undefined不是构造函数(评估'范围。$ parent.deleteModeConfig(scope.analytic,scope.config) )')

    有人可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

没有回答,但不得不说: 使用父作用域不是一个很好的做法。您应该隔离范围并通过属性提供函数来操作该属性。如果要操作的属性很多,则通过包含所有必需函数的属性传递单个对象。测试时,只需模拟方法/配置对象并验证调用

答案: 在代码中测试它的方法是创建一个父作用域的模拟,它包含父作用域本身的属性,该属性包含您要检查的属性。