2014-10-27 21 views
12

Fino a un paio di giorni fa i miei test di unità funzionavano bene e il mio codice funzionava perfettamente nel browser. Poi ho notato questo dopo ho aggiunto un modulo stub chiamato 'profilo':Il modulo Karma complains 'non è disponibile'

INFO [karma]: Karma v0.12.24 server started at http://localhost:9876/ 
INFO [launcher]: Starting browser PhantomJS 
INFO [PhantomJS 1.9.7 (Mac OS X)]: Connected on socket 7W-0vnkWZaWxYYtwFrhT with id 9336780 
PhantomJS 1.9.7 (Mac OS X) ERROR 
    Error: [$injector:nomod] Module 'profile' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument. 

Ora, mi rendo conto che questo è l'errore più comune AngularJS sulla terra, e ho ottenuto abbastanza bravo a debug questo, ma per il vita di me non posso far sparire questo. I dettagli:

  • Il codice funziona nel browser senza errori.
  • Karma raccoglie i miei file in questo modo:

    'node_modules/angular/angular.js', 
        'node_modules/angular-mocks/angular-mocks.js', 
        'node_modules/angular-ui-router/release/angular-ui-router.js', 
        'node_modules/angular-bootstrap/ui-bootstrap.js', 
        'node_modules/angular-ui-form-validation/dist/angular-ui-form-validation.js', 
        'node_modules/angular-animate/angular-animate.js', 
        'client/app/**/*.js' 
    
  • Il modulo principale ha una dipendenza 'profilo' dichiarato già.

  • profile.js, profile.controller.js e profile.controller.spec.js sono stub generati da cg-angular-fullstack e non hanno codice speciale. Il generatore di default li inserisce tutti nel modulo principale, quindi ho cambiato il modulo per ciascuno in "profilo".

Sono completamente fuori dalle idee. Se non riesco a eseguire il debug, dovrò supporre che tutta la mia progettazione dell'app sia difettosa e che si riavvii. . :(

risposta

20

In qualche modo Karma non è stato l'importazione di file nel giusto ordine, anche se fosse stato per settimane prima mia risoluzione era di tre parti:

  1. rinominati tutte le definizioni dei moduli da * .js a *. module.js
  2. rinominati tutti UI Router lavoro che non era in una definizione di modulo dal js * per * .state.js
  3. file importati in questo ordine:..

     'node_modules/jquery/dist/jquery.js', 
         'node_modules/angular/angular.js', 
         'node_modules/angular-mocks/angular-mocks.js', 
         'node_modules/angular-ui-router/release/angular-ui-router.js', 
         'node_modules/angular-bootstrap/ui-bootstrap.js', 
         'node_modules/angular-ui-form-validation/dist/angular-ui-form-validation.js', 
         'node_modules/angular-animate/angular-animate.js', 
    
         // client files 
         'client/app/app.module.js', 
         'client/app/app.controller.js', 
         'client/app/**/*.service.js', 
         'client/app/**/*.directive.js', 
         'client/app/**/*.module.js', 
         'client/app/**/*.state.js', 
         'client/app/**/*.controller.js', 
         'client/app/**/*.spec.js' 
    

Solo allora il test di ricominciare a lavorare.

+0

Grazie che ha lavorato per me. Ho dovuto mettere app/**/*. Module.js prima nella lista per la mia app particolare. – ProgrammerGuy

Problemi correlati