Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Angular Mock重写父指令并模拟它_Angularjs_Unit Testing_Karma Jasmine - Fatal编程技术网

Angularjs Angular Mock重写父指令并模拟它

Angularjs Angular Mock重写父指令并模拟它,angularjs,unit-testing,karma-jasmine,Angularjs,Unit Testing,Karma Jasmine,我试图模拟驻留在其父模块相同模块上的指令。 因为我想将测试隔离为仅子指令,所以我尝试模拟父指令。 如果它们都位于不同的模块上,这将很容易实现,但是因为它们位于同一个模块上,所以我得到了多个同名的指令。 为了绕过这一点,我尝试在模拟指令中添加类似的内容: return { priority: 100, terminal:true, restrict:'CE',

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

        return {
                priority: 100,
                terminal:true,
                restrict:'CE',
                scope:{
                    zoom:'@'
                },
                template:'<div ng-transclude></div>',
                controllerAs:'parentController',
                controller:mockController,
                transclude: true
            };
返回{
优先:100,
终端:是的,
限制:'CE',
范围:{
缩放:'@'
},
模板:“”,
controllerAs:“父控制器”,
控制器:模拟控制器,
转移:对
};
问题是,尽管我可以重写父指令,但从未调用子指令,因为它的优先级较低,并且终端将停止执行


我正在寻找的是一种在karma jasmine上进行测试并使用angular.mock时重写指令定义的方法。

添加指令时,它会自动创建一个工厂并将该指令放在一个数组中,以便多个指令可以响应同一标记

通过创建一个名为指令的服务,找到了一种使其工作的方法。不幸的是,可能是由于angular的更改,他的解决方案没有为我解决它,因为angular要求在指令和$$moduleName上使用$$bindings键,并将它们添加到工厂解决了它

我是这样嘲笑的:

    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];
            }
        );

    });
angular.mock.module('theModuleIWantToTest');
angular.mock.module(函数($provide){
$provide.factory('mockParentDirective',function(){
var指令={
优先级:0,
名称:'mockParent',
限制:'CE',
范围:{
缩放:'@'
},
模板:“”,
controllerAs:'mockParentController',
控制器:模拟控制器,
是的,
$$moduleName:'theModuleIWantToTest',
$$bindings:{}
};
返回[指令];
}
);
});
其中mockParent是我要重写的先前声明的指令

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