2016-12-29 1 views
1

Je tente une application Angular avec un backend Grails, et je suis un testeur unitaire du contrôleur, simplement pour voir s'il existe, avant de commencer à travailler avec. Malheureusement, il me donne l'erreur suivante:Le contrôleur angulaire ne s'enregistre pas pendant les tests unitaires

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

Voici mon code de test unitaire:

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(); 
    }); 

}); 

Voici le code du contrôleur:

function SecurityController(){ 
    'ngInject'; 

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

export default SecurityController; 

Et voici le code du module, pour faire bonne mesure:

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; 

Le module de sécurité est corrigé dans mon module d'application principal, donc je peux le fournir aussi. J'ai lu quelques ressources à ce sujet, mais rien de ce que j'ai essayé n'a été particulièrement utile jusqu'ici.

Merci d'avance!

+1

Cela ressemble beaucoup plus à Angular2 qu'à AngularJS. Je n'ai jamais vu la syntaxe '' ngInject '' dans AngularJS, par exemple. –

+1

@MikeMcCaughan, c'est en fait une tâche de post-traitement appelée NgAnnotate. Et oui, c'est pour l'angulaire 1. C'est un épargnant de vie. Vous devriez examiner. –

+0

C'est peut-être juste parce que j'utilise ES6 au lieu de ES5. – Cooper

Répondre

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

devrait être

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

Vous devez fournir le nom ov le contrôleur/service, puis sa mise en œuvre.

+0

Ah, je ne peux pas croire que j'ai raté ça! Cela l'a fait pour moi. Merci! – Cooper