AngularJS:如何使用控制器和多个服务测试隔离指令

时间:2015-06-12 08:57:22

标签: angularjs karma-jasmine

我有Angular JS directive,其controller controller内部调用了多个services。如何使用Karma对此进行测试。

这是我的代码结构,

  1. 在我的directive我正在显示service内部从controller获取数据的数据。如下所示。

    <div class='tile'>

    <div class="count">{{tileRegistry.tileData.tileCount}}</div>

    </div>

  2. 这里tileRegistry从控制器服务获取数据,如下所示

    var commonController =  ['$scope','$filter','tileSvc','navSvc','appSetting',  function ($scope,$filter, tileSvc,navSvc,applSettig) {
    
     function commonController() {
        var tileType = $scope.tile.id;
        $scope.tileRegistry=tileSvc.getRegistry(tileType);
        $scope.limit=6;
     }
     commonController();
     $scope.link = function(){       
         var url = $scope.tile.uriLink;     
         applSetting.setpatientListActive(false);
         navSvc.navigateToSegment(url, {});
     };
    
    }];
    
    1. tileSvc是从控制器调用的服务,如下所示
      angular module('app').service('tileSvc',['pblmSvc','procSvc','allgSvc',
          function(pblmSvc,procSvc,allgSvc){
          this.getRegistry = function(tileType){
              switch(tileType){
              case 'ALG': return allgSvc.registry; break;
              case 'PROB: return pblmSvc.registry; break;
              default: return null;
         }
      };
      }]);
      
    2. 请有人告诉我如何模拟这个控制器和服务以测试我的指令。

      由于

1 个答案:

答案 0 :(得分:0)

将mock json对象传递给$ controller()并覆盖必要的服务调用:

beforeEach(function () {
    module('you_app_module');

    var $scope;
    inject(function ($injector, $controller, $rootScope, $filter) {
        $scope = $rootScope.$new();

        var tileSvcMock = {
            getRegistry: function (tileType) {
                return "some mock data";
            }
        };
        var navSvcMock = {
            navigateToSegment: function (param1, param2) {
                return "some mock data";
            }
        };
        var appSettingMock = {

        };
        $controller(commonController,
            {
                $scope: $scope,
                $filter: $filter,
                tileSvc: tileSvcMock,
                navSvc: navSvcMock,
                appSetting: appSettingMock
            });
    });
});