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指令的方法