【问题标题】:How to test scope parent function in directive using jasmine如何使用茉莉花测试指令中的范围父函数
【发布时间】:2016-03-16 20:52:48
【问题描述】:

我正在为 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();
    });
    

end是第一个cancel函数测试通过了,但是submit函数失败了,错误是:undefined is not a constructor (evaluating 'scope.$parent.deleteModeConfig(scope.analytic,scope.config)')

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

【问题讨论】:

    标签: angularjs unit-testing jasmine parent directive


    【解决方案1】:

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

    回答: 您在代码中测试它的方式是创建一个包含父范围本身的属性的父范围的模拟,该属性包含您要检查的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2015-09-23
      • 1970-01-01
      • 2012-06-12
      相关资源
      最近更新 更多