【问题标题】:Angular-Mock override parent directive and mock itAngular-Mock 覆盖父指令并模拟它
【发布时间】:2015-07-08 04:54:04
【问题描述】:

我正在尝试模拟驻留在其父模块的同一模块上的指令。 由于我想将测试隔离到子指令,因此我试图模拟父指令。 如果它们都驻留在不同的模块上,那将很容易实现,但是由于它们位于相同的模块上,因此我得到了多个具有相同名称的指令。 为了绕过这一点,我试图在我的模拟指令中添加这样的内容:

        return {
                priority: 100,
                terminal:true,
                restrict:'CE',
                scope:{
                    zoom:'@'
                },
                template:'<div ng-transclude></div>',
                controllerAs:'parentController',
                controller:mockController,
                transclude: true
            };

问题是,虽然我可以覆盖父指令这样做,但子指令永远不会被调用,因为它的优先级较低,终端将停止执行。

我正在寻找的是一种在测试 karma-jasmine 并使用 angular.mock 时覆盖指令定义的方法。

【问题讨论】:

    标签: angularjs unit-testing karma-jasmine


    【解决方案1】:

    当你添加一个指令时,它会自动创建一个工厂并将指令放在一个数组中,这样多个指令就可以响应同一个标记。

    This person 有一种方法可以通过创建一个名为该指令的服务来使其工作。不幸的是,可能由于角度变化,他的解决方案还没有为我解决,因为 Angular 需要一个 $$bindings 键指令和 $$moduleName,将它们添加到工厂解决了它。

    我让它像这样模拟:

        angular.mock.module('theModuleIWantToTest');
        angular.mock.module(function($provide){
            $provide.factory('mockParentDirective', function(){
                    var directive={
                        priority:0,
                        name:'mockParent',
                        restrict:'CE',
                        scope:{
                            zoom:'@'
                        },
                        template:'<div ng-transclude></div>',
                        controllerAs:'mockParentController',
                        controller:mockController,
                        transclude: true,
                        $$moduleName:'theModuleIWantToTest',
                        $$bindings:{}
                    };
                    return [directive];
                }
            );
    
        });
    

    其中 mockParent 是我想要覆盖的先前声明的指令。

    我认为这不是最好的方法,但目前这是我发现在 Angular 1.4.2 上覆盖指令的唯一方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 2019-11-11
      • 2015-06-29
      • 1970-01-01
      • 2018-02-10
      • 2022-11-18
      相关资源
      最近更新 更多