2016-06-09 120 views
1

Jasmine新手,我试图实例化我的控制器,它有一个依赖列表(主要是我写的服务)以及我尝试过的所有不同方式是对的。Angular-Jasmine将服务注入测试

这里是我的控制器:

(function() { 
'use strict'; 

angular.module('app.match') 
     .controller('MatchController', MatchController); 


MatchController.$inject = ['APP_CONFIG', '$authUser', '$http', '$rootScope', '$state', '$stateParams', 'SearchService', 'ConfirmMatchService', 'MusicOpsService', 'ContentOpsService', 'MatchstickService', 'MatchService', 'Restangular']; 
function MatchController(APP_CONFIG, $authUser, $http, $rootScope, $state, $stateParams, searchService, confirmMatchService, musicOpsService, contentOpsService, matchstickService, matchService, Restangular) { 

    var vm = this; 
    vm.greeting = ''; 
    . 
    . 
)(); 

这里是我的测试 (函数(){ '使用严格的';

describe('app module', function() { 
    var MatchController; 

    //beforeEach(module('app.match')); 
    beforeEach(function($provide) { 
     module = angular.module('app.match'); 
     $provide.service('SearchService', function(){ 

     }); 
    }); 
    beforeEach(module('app.config')); 
    beforeEach(module('auth')); 


    beforeEach(inject(function($controller, APP_CONFIG, $authUser, $http, $rootScope, $state, $stateParams) { 


     MatchController = $controller('MatchController', {'APP_CONFIG':APP_CONFIG, '$authUser':$authUser, '$http':$http, '$rootScope':$rootScope, '$state':$state, '$stateParams':$stateParams, '$provide':$provide}); 

    })); 

    describe("Match controller", function() { 

     it("should be created successfully", function() { 
      expect(MatchController).toBeDefined(); 
     }); 
    }); 
    }); 

})(); 

运行测试上述方式给了我下面的错误:

TypeError: 'undefined' is not a function (evaluating '$provide.service('SearchService', function(){ 
      })') 

回答

1

尝试注射SearchService像硫而不是使用beforeEach

describe('app module', function() { 
var MatchController, SearchService; 

beforeEach(module('app.match')); 
beforeEach(module('app.config')); 
beforeEach(module('auth')); 


beforeEach(inject(function($controller, APP_CONFIG, $authUser, $http, $rootScope, $state, $stateParams, _SearchService_) { 

    SearchService = _SearchService_; 

    MatchController = $controller('MatchController', { 
     'APP_CONFIG':APP_CONFIG, 
     '$authUser':$authUser, 
     '$http':$http, 
     '$rootScope':$rootScope, 
     '$state':$state, 
     '$stateParams':$stateParams, 
     '$provide':$provide, 
     'SearchService': _SearchService_ 
    }); 

})); 

describe("Match controller", function() { 

    it("should be created successfully", function() { 
     expect(MatchController).toBeDefined(); 
    }); 
}); 
}); 
})(); 

同样,你必须注入其他服务,以及你的控制器依赖。