unit test run karma and javascript angularjs jasmine karma-runner

javascript - and - Módulo angular no disponible en Karma Jasmine test run



test unit angular 4 (2)

El módulo (s) debe cargarse en sus archivos karma antes del resto de la aplicación.

Esto se debe a que "Llamar a angular.module sin la matriz de dependencias cuando el módulo aún no se ha definido hace que se docs.angularjs.org este error" docs.angularjs.org . Por lo tanto, debe cargar explícitamente los archivos antes del resto de su aplicación.

En tus archivos javascript Karma.config:

''app/bower_components/jquery/jquery.js'', ''app/bower_components/angular/angular.js'', ''app/bower_components/angular-mocks/angular-mocks.js'', ''app/bower_components/angular-cookies/angular-cookies.js'', ''app/bower_components/angular-resource/angular-resource.js'', ''app/bower_components/angular-route/angular-route.js'', ''app/bower_components/angular-sanitize/angular-sanitize.js'', ''app/bower_components/angular-scenario/angular-scenario.js'', ''app/scripts/app.js'', // Load your module before the rest of your app. ''app/scripts/controllers/*.js'', ''app/scripts/directives/*.js'', ''app/scripts/services/*.js'', ''lib/routes.js'', ''test/karma/unit/**/test.spec.js''

Estoy usando la pila angular completa para el desarrollo, mi archivo karma.conf.js es

files: [ ''app/bower_components/jquery/jquery.js'', ''app/bower_components/angular/angular.js'', ''app/bower_components/angular-mocks/angular-mocks.js'', ''app/bower_components/angular-cookies/angular-cookies.js'', ''app/bower_components/angular-resource/angular-resource.js'', ''app/bower_components/angular-route/angular-route.js'', ''app/bower_components/angular-sanitize/angular-sanitize.js'', ''app/bower_components/angular-scenario/angular-scenario.js'', ''app/scripts/controllers/*.js'', ''app/scripts/directives/*.js'', ''app/scripts/services/*.js'', ''app/scripts/app.js'', ''lib/routes.js'', ''test/karma/unit/**/test.spec.js'' ],

Especificaciones de prueba:

''use strict''; (function() { describe(''App'', function() { describe(''TestController'', function() { beforeEach(function() { this.addMatchers({ toEqualData: function(expected) { return angular.equals(this.actual, expected); } }); }); // Load the controllers module beforeEach(module(''ratefastApp'')); // Initialize the controller and a mock scope var TestController, mockUserResource, scope, $httpBackend, $routeParams, $location; // The injector ignores leading and trailing underscores here (i.e. _$httpBackend_). // This allows us to inject a service but then attach it to a variable // with the same name as the service. beforeEach( inject(function($controller, $rootScope, _$location_, _$routeParams_, _$httpBackend_) { scope = $rootScope.$new(); TestController = $controller(''TestController'', { $scope: scope }); $routeParams = _$routeParams_; $httpBackend = _$httpBackend_; $httpBackend.when(''GET'', ''/api/test/page/:pagenum'') .respond([{title: ''test''}]); $location = _$location_; })); }); }); });

Al ejecutar lo anterior, $injector:nomod Module is not available .


Este error indica que no se encuentra algún módulo. Específicamente, la fuente de loader.js parece mostrar que este error se produce cuando no se ha registrado un módulo con angular.module . ¿Lo has hecho con ratefastApp ? Aquí está la fuente copiada:

if (!requires) { throw $injectorMinErr(''nomod'', "Module ''{0}'' 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.", name); }

Además, ya que estás intentando inyectar $controller, $rootScope, _$location_, _$routeParams_, _$httpBackend_ , con el simulacro $inject , comenzaré asegurándome de que tienes los archivos que contienen esos servicios en tu karma.conf Directiva de files .js. También es posible que desee utilizar comodines para incluir todos los archivos angulares.