20
konnte nicht instanziiert werden

Meine eckige App funktionierte großartig und so taten meine Tests mit Karma und Jasmin, bis ich eine Abhängigkeit in ui.bootstrap hinzufügte. Jetzt funktioniert die App immer noch wie erwartet, aber ich kann meine Tests nicht ausführen. Das ist, was ich habe:AngularJS Jasmine Test schlägt fehl: Modul

app.js - hinzugefügt Abhängigkeit in ui.bootstrap

angular.module('myApp', ['ngResource', 'ngRoute', 'ui.bootstrap']).config(function(...) {...}); 

service.js

angular.module('myApp').service('myService', function() {}) 

controller.js

angular.module('myApp').controller('MyController', function ($scope, $http, myService) {}) 

Tests/main.js

describe('Controller: MyController', function() { 
    var MyController, scope; 
    // load the controller's module 
    beforeEach(function(){ 
     module('myApp'); 
     inject(function ($controller, $rootScope) { 
      scope = $rootScope.$new(); 
      MyController = $controller('MyController', { 
       $scope:scope 
      }); 
     }); 
    }); 
    it('should do something', function() { 
     expect(scope.myOptions.length).toBe(5); 
    }); 
}); 

Und mein Test, den ich grunzen und krama laufen verwenden, schlägt durch:

Error: [$injector:modulerr] Failed to instantiate module myApp due to: 
Error: [$injector:modulerr] Failed to instantiate module ui.bootstrap due to: 
Error: [$injector:nomod] Module 'ui.bootstrap' is not available! You either misspelled the module name or forgot 

Was habe ich verpasst? Die App läuft ohne Probleme, nur der Test schlägt fehl.

+23

überprüfen Sie bitte Ihre Datei karam.conf.js, dass die bootstrap-ui js-Dateien enthalten sind. – michael

+0

Ja, das war es. Verpasste die karma.conf.js dort. Vielen Dank! – Haji

+1

Ich habe das gleiche Problem gerade jetzt, aber ich fragte mich, warum ich alle Module laden sollte, wenn es ein Komponententest ist und diesen spezifischen Teil des Codes isolieren sollte? Wenn ich nicht falsch verstehe, fühlt es sich an, als müsste man alles laden, was eher ein Integrationstest wäre. – Stokedout

Antwort

33

In karma.conf.js gibt es eine Liste von Dateien, die Karma Lasten vor der Testdurchführung:

// list of files/patterns to load in the browser 
files: [ 
    'bower_components/angular/angular.js', 
    'bower_components/angular-mocks/angular-mocks.js', 
    ... 
] 

dort Bootstrap-ui.js hinzufügen.

+1

Die Frage tauchte immer noch als unbeantwortet auf, da sie nur in Kommentaren beantwortet wurde. Also habe ich es wieder als "echte Antwort" hinzugefügt –

+4

Frage: Musst du so etwas nicht machen? 'modul ('myApp', '' ngResource ',' ngRoute ',' ui.bootstrap ')' im Test, um das Modul zu referenzieren und zu instanziieren? –

2

spritzen Sie Ihre Abhängigkeiten

beforeEach(function(){ 
    angular.module('ui.bootstrap',[]); 
}); 
1

ich hatte das gleiche Problem. Habe es gerade gelöst. Irgendwie setzen die module(myApp); Funktionsaufruf innerhalb einer Funktion, die Sie beforeEach() bieten nicht nur versuchen, dies funktioniert:

das Modul Aufruf in seine eigene before Extract():

beforeEach(module('myApp')); 

Und verwenden Sie eine andere before() für die Funktion, die Sie verwenden.