Angular JS Error: [$ injector: nomod] Module "portfolioMockupApp.services" is not available

I try to write some unit tests with Karma and get the following error:

PhantomJS 1.9.8 (Mac OS X) ERROR Error: [$ injector: nomod] Module "portfolioMockupApp.services" is not available! You either mistakenly wrote the name of the module, or forgot to load it. If registering a module ensures that you specify the dependencies as the second argument. http://errors.angularjs.org/1.3.3/ $ injector / nomod? p0 = portfolioMockupApp.services at / Users / danielbogart / Documents / coding / work / portfolio-mockup / bower_components / angular / angular.js: 1749

In addition, I have two separate files in the portfolioMockupApp.services module, both stored in the scripts / services directory.

Karma.conf file section:

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 (first and only test currently):

 'use strict'; describe('Controller: PortfolioCtrl', function () { // load the controller 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); }); }); 
+7
javascript angularjs unit-testing phantomjs karma-runner
source share
2 answers

The problem is related to the presence of two separate service files using the same service module. In the Karma.conf file, I had to explicitly load the service file that initialized the module, and then another service file and the rest of the application afterwards.

  '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', 
+14
source share

Thank you for coming back with a solution. I had the same problem when two modules relied on each other and existed in the same folder, allowing you to call them app / scripts / parentModule.js and app / scripts / constants.js. Both must be picked up by a wildcard entry in the karma.config.js file.

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

Since constants.js relies on parentModule.js, it should later be included first, and my guess is a wildcard that includes files in alphabetical order, but I have not confirmed this yet.

 'app/scripts/parentModule.js' 'app/scripts/*.js' 'app/scripts/anotherFolder/*.js' 
+1
source share

All Articles