2014-11-25 7 views
7

Sto tentando di scrivere alcuni test di unità con il Karma e sto ricevendo il seguente errore:

PhantomJS 1.9.8 (Mac OS X) ERRORE Errore : [$ injector: nomod] Module 'portfolioMockupApp.services' non è disponibile! Hai sbagliato a scrivere il nome del modulo o hai dimenticato di caricarlo. Se si registra un modulo, assicurarsi di specificare le dipendenze come secondo argomento. http://errors.angularjs.org/1.3.3/ $ iniettore/nomod? P0 = portfolioMockupApp.services a /Users/danielbogart/Documents/coding/work/portfolio-mockup/bower_components/angular/angular.js:1749

Inoltre, ho due file separati all'interno il modulo portfolioMockupApp.services, entrambi salvati nella directory scripts/services.

Karma.conf sezione file:

files: [ 

    'bower_components/angular/angular.js', 
    'bower_components/angular-mocks/angular-mocks.js', 
    'bower_components/angular-animate/angular-animate.js', 
    'bower_components/angular-cookies/angular-cookies.js', 
    'bower_components/angular-resource/angular-resource.js', 
    'bower_components/angular-sanitize/angular-sanitize.js', 
    'bower_components/angular-touch/angular-touch.js', 

    'test/mock/**/*.js', 
    'test/spec/**/*.js', 
    'app/scripts/services/*.js', 
    'app/scripts/directives/*.js', 
    'app/scripts/controllers/*.js', 
    'app/scripts/app.js', 
    'node_modules/angular/angular.js', 
    'node_modules/angular-mocks/angular-mocks.js', 
    './src/**/*.js', 
    './test/**/*.js' 
], 

Portfolio.js spec (primo ed unico test attualmente):

'use strict'; 

describe('Controller: PortfolioCtrl', function() { 

// load the controller's module 
beforeEach(module('portfolioMockupApp', 'portfolioMockupApp.services')); 

var PortfolioCtrl, 
scope; 

// Initialize the controller and a mock scope 
beforeEach(inject(function ($controller, $scope, $log, $stateParams, $state, 

$rootScope,portService, portfolioCreateService) { 
scope = $rootScope.$new(); 
PortfolioCtrl = $controller('PortfolioCtrl', { 
    $scope: scope 
    }); 
})); 

it('should have a list of 5 tabs by default', function() { 
    expect(scope.tabs.length).toBe(5); 
    }); 
}); 

risposta

14

Il problema derivava dall'avere due file di servizio separati utilizzando lo stesso modulo di servizio . Nel file Karma.conf ho dovuto caricare in modo esplicito il file di servizio che ha inizializzato il modulo, quindi l'altro file di servizio e il resto dell'app in seguito.

'app/scripts/services/port-service.js', 
    'app/scripts/services/new-port-service.js', 
    'app/scripts/app.js', 
    'app/scripts/services/*.js', 
    'app/scripts/directives/*.js', 
    'app/scripts/controllers/*.js', 
1

Grazie per il check-in con una soluzione. Ho avuto lo stesso problema quando due moduli facevano affidamento l'uno sull'altro ed esistevano nella stessa cartella, chiamiamoli app/script/parentModule.js e app/scripts/constants.js. Entrambi dovrebbero essere selezionati dalla voce jolly in karma.config.js.

'app/scripts/*.js' 
'app/scripts/anotherFolder/*.js' 

Dal constants.js si basa su parentModule.js, il più tardi devono essere inclusi prima e la mia ipotesi è il jolly è stato inclusi i file in ordine alfabetico ma non ho ancora confermato questo.

'app/scripts/parentModule.js' 
'app/scripts/*.js' 
'app/scripts/anotherFolder/*.js'