2016-12-29 70 views
1

我正在嘗試使用Grails後端的Angular應用程序,並且在開始使用它之前,我正在對控制器進行單元測試,以查看它是否存在。不幸的是,它給我以下錯誤:角度控制器未在單元測試期間註冊

[$controller:ctrlreg] The controller with the name 'SecurityController' is not registered. 

這裏是我的單元測試代碼:

import angular from 'angular'; 
import 'angular-mocks'; 
import worldManagerApp from '../../src/world-manager-app'; 
import security from '../../src/security/security'; 

const {inject, module} = angular.mock; 

describe('SecurityController',() => { 
    let $state; 
    let vm; 

    beforeEach(module(worldManagerApp)); 
    beforeEach(module(security)); 

    beforeEach(inject((_$state_, $controller) => { 
     $state = _$state_; 
     spyOn($state, 'go'); 

     vm = $controller('SecurityController', { 
     }); 
    })); 

    it('should be registered',() => { 
     expect(vm).toBeDefined(); 
    }); 

}); 

這裏是控制器代碼:

function SecurityController(){ 
    'ngInject'; 

    const vm = this; 
    vm.security = "secure"; 
} 

export default SecurityController; 

這裏是模塊代碼,爲好措施:

import angular from 'angular'; 
import uiRouter from 'angular-ui-router'; 

import SecurityController from './securityController' 
import SignUp from './services/signUpService'; 
import AuthenticationService from './services/authService' 

const security = angular.module('security', [ 
    uiRouter, 
]).controller(SecurityController) 
    .service(SignUp) 
    .service(AuthenticationService); 

export default security.name; 

安全模塊被修補到我的主應用模塊中,所以我也可以提供。我已閱讀了一些關於此的資源,但迄今爲止,我嘗試過的任何內容都特別有用。

在此先感謝!

+1

這看起來比AngularJS更像Angular2。例如,我從來沒有在AngularJS中看到'ngInject'的語法。 –

+1

@MikeMcCaughan,這實際上只是一個名爲NgAnnotate的後處理任務。是的,這是爲了角度1.這是一個生活救星。你應該看看它。 –

+0

這可能只是因爲我使用的是ES6而不是ES5。 – Cooper

回答

1
.controller(SecurityController) 
.service(SignUp) 
.service(AuthenticationService); 

應該

.controller('SecurityController', SecurityController) 
.service('SignUp', SignUp) 
.service('AuthenticationService', AuthenticationService); 

您需要提供姓名OV控制器/服務,然後將其實現。

+0

啊,我不能相信我錯過了!那爲我做了。謝謝! – Cooper