Angular-模拟覆盖父指令并模拟它
Angular-Mock override parent directive and mock it
我正在尝试模拟驻留在其父模块的同一模块上的指令。
因为我想将测试隔离到子指令,所以我试图模拟父指令。
如果它们都驻留在不同的模块上,那将是很容易实现的,但由于它们在同一个模块上,我得到多个具有相同名称的指令。
为了绕过它,我试图在我的模拟指令中加入这样的东西:
return {
priority: 100,
terminal:true,
restrict:'CE',
scope:{
zoom:'@'
},
template:'<div ng-transclude></div>',
controllerAs:'parentController',
controller:mockController,
transclude: true
};
问题是虽然我可以这样做覆盖父指令,但永远不会调用子指令,因为它具有较低的优先级并且终端将停止执行。
我正在寻找的是一种在 karma-jasmine 上测试并使用 angular.mock.
时覆盖指令定义的方法
当您添加一个指令时,它会自动创建一个工厂并将指令放在一个数组中,这样多个指令就可以响应相同的标记。
This person 通过创建一个名为 directive.Unfortunately 的服务来使其工作,这可能是由于 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];
}
);
});
其中 mockParent 是我要覆盖的先前声明的指令。
我认为这不是最好的方法,但目前这是我发现覆盖 Angular 1.4.2
上的指令的唯一方法
我正在尝试模拟驻留在其父模块的同一模块上的指令。 因为我想将测试隔离到子指令,所以我试图模拟父指令。 如果它们都驻留在不同的模块上,那将是很容易实现的,但由于它们在同一个模块上,我得到多个具有相同名称的指令。 为了绕过它,我试图在我的模拟指令中加入这样的东西:
return {
priority: 100,
terminal:true,
restrict:'CE',
scope:{
zoom:'@'
},
template:'<div ng-transclude></div>',
controllerAs:'parentController',
controller:mockController,
transclude: true
};
问题是虽然我可以这样做覆盖父指令,但永远不会调用子指令,因为它具有较低的优先级并且终端将停止执行。
我正在寻找的是一种在 karma-jasmine 上测试并使用 angular.mock.
时覆盖指令定义的方法当您添加一个指令时,它会自动创建一个工厂并将指令放在一个数组中,这样多个指令就可以响应相同的标记。
This person 通过创建一个名为 directive.Unfortunately 的服务来使其工作,这可能是由于 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];
}
);
});
其中 mockParent 是我要覆盖的先前声明的指令。
我认为这不是最好的方法,但目前这是我发现覆盖 Angular 1.4.2
上的指令的唯一方法