2016-11-24 177 views
0

我開始與AngularJs和我正在面臨一個問題,當試圖單元測試一個服務作爲依賴項的控制器。該應用程序按預期工作,但不是單元測試。我與茉莉花測試以下錯誤:無法單元測試角度控制器與服務模擬

Error: [$injector:modulerr] Failed to instantiate module ghhweb.register due to: Error: [$injector:unpr] Unknown provider: $stateProvider

我的模塊代碼:

var registerModule = angular.module('ghhweb.register',[]); 

registerModule.config(function($stateProvider, $locationProvider){ 
    var registerState = { 
     name: 'register', 
     url: '/register', 
     controller: 'RegisterController', 
     templateUrl: 'modules/register/views/register.html' 
    }; 

    $stateProvider.state(registerState); 
}); 

我的控制器代碼:

var registerController = angular.module('ghhweb.register.controller',[]); 

registerController.controller('RegisterController', ['$scope', 
    'userRestService', function($scope, userRestService){ 
    $scope.callCheckExistingMail = function(){ 
     $scope.userEmail = userRestService.checkExistingMail($scope.userEmail); 
    }; 
}]); 

我的規格代碼:

describe('controller register module unit tests', function(){ 
    describe('check user service implementation', function(){ 

     beforeEach(module('ghhweb.register')); 

     it('should call checkExistinMail in userRestService', inject(function(
       $rootScope, $controller){ 
      // make a userRestService 
      var userRestService = { 
       checkExistingMail: function() {} 
      }; 

      spyOn(userRestService, "checkExistingMail"); 

      controller('RegisterController', {$scope: scope, 
       userRestService: userRestService }); 

      expect(userRestService.checkExistingMail).toHaveBeenCalled(); 
     })); 

    }); 

}); 

我已經試過很多的教程和檢查的幾個職位像這樣:

我想我有一個配置問題的地方,但我無法解決它。

有沒有人有想法?

回答

0

我懷疑我以前的測試代碼不適用於我現有的庫版本。我使用的是:

"devDependencies": { 
"bower": "^1.8.0", 
"http-server": "^0.9.0", 
"jasmine-core": "^2.4.1", 
"karma": "^1.3.0", 
"karma-chrome-launcher": "^2.0.0", 
"karma-firefox-launcher": "^1.0.0", 
"karma-jasmine": "^1.0.2", 
"phantomjs": "^2.1.7", 
"protractor": "^4.0.9" 

經過進一步調查我改寫了測試代碼如下:

describe('controller register module unit tests implementation', function(){ 

    var $controller; 
    var $scope; 
    var userRestService; 

    beforeEach(module('ghhweb.register.controller', function($provide){ 
     userRestService = jasmine.createSpyObj('userRestService' 
      , ['checkExistingMail']); 

     userRestService.checkExistingMail.and.returnValue(0); 

     $provide.value('userRestService', userRestService); 
    })); 


    beforeEach(inject(function(_$controller_, $rootScope,_userRestService_){ 
     $scope = $rootScope.$new(); 
     userRestService = _userRestService_; 
     $controller = _$controller_('RegisterController', { 
      $scope: $scope, 
      userRestService: userRestService 
     }); 
     $scope.callCheckExistingMail(); 
    })); 

    it('should call userRestService', function(){ 
     expect(userRestService.checkExistingMail).toHaveBeenCalled(); 
    }); 
}); 

測試現在運行正常!

相關問題