Javascript 角度指令单元测试中的模拟控制器实例化
我正在对Angular指令进行单元测试,并希望以某种方式模拟或存根单元测试中命名控制器的实例化 所以首先我想讲一些代码Javascript 角度指令单元测试中的模拟控制器实例化,javascript,angularjs,unit-testing,jasmine,karma-runner,Javascript,Angularjs,Unit Testing,Jasmine,Karma Runner,我正在对Angular指令进行单元测试,并希望以某种方式模拟或存根单元测试中命名控制器的实例化 所以首先我想讲一些代码 'use strict'; angular.module('App.Directives.BreadCrumbs', []) .directive('kxBreadcrumbs', function () { return { restrict: 'E', controller: 'BreadCrumb
'use strict';
angular.module('App.Directives.BreadCrumbs', [])
.directive('kxBreadcrumbs', function () {
return {
restrict: 'E',
controller: 'BreadCrumbsController',
template:
'<!-- Breadcrumbs Directive HTML -->' +
'<ol class="breadcrumb">' +
' <li ng-repeat="crumb in crumbPath">' +
' <a ng-class="{true: \'disable\', false: \'\'}[crumb.last]" href="{{crumb.href}}" ng-click="updateCrumb(crumb.name)">{{crumb.name}}</a>' +
' </li>' +
'</ol>' +
'<!-- End of Breadcrumbs Driective HTML -->'
};
});
而不是(添加模块以进一步说明我的观点)
模块('App.directions.BreadCrumbs');
模块('App.Controllers.BreadCrumbs');
模块('App.Constants');// 您可以使用控制器的$controllerProvider.register()
,$provider.provider()
,$provide.factory()
,$provide.service()
和$provide.value()
为提供者、工厂和服务创建模块配置块中的模拟:
JavaScript
beforeEach(function () {
module('App.Directives.BreadCrumbs', function($provide, $controllerProvider) {
$controllerProvider.register('BreadCrumbsController', function($scope) {
// Controller Mock
});
$provide.factory('someService', function() {
// Service/Factory Mock
return {
doSomething: function() {}
}
});
});
});
一旦您这样做,Angular将把您的模拟BreadCrumbsController
控制器注入kxBreadcrumbs
指令。这样,您就不需要在单元测试中包含真正的控制器及其依赖项
有关更多信息,请参阅Angular的官方文档:
module('App.Directives.BreadCrumbs');
module('App.Directives.BreadCrumbs');
module('App.Controllers.BreadCrumbs');
module('App.Constants'); // <--- Comes from the controller dependancy
module('App.Service.SomeService'); // <--- Comes from the controller dependancy
module('App.Service.SomeOtherService'); // <--- Comes from the SomeService dependancy
beforeEach(function () {
module('App.Directives.BreadCrumbs', function($provide, $controllerProvider) {
$controllerProvider.register('BreadCrumbsController', function($scope) {
// Controller Mock
});
$provide.factory('someService', function() {
// Service/Factory Mock
return {
doSomething: function() {}
}
});
});
});