Javascript 角度指令单元测试中的模拟控制器实例化

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

我正在对Angular指令进行单元测试,并希望以某种方式模拟或存根单元测试中命名控制器的实例化

所以首先我想讲一些代码

'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() {}
            }
        });
    });
});