2016-12-29 100 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