Ich versuche, den Standard-Serviceeinheitentest in meinem Projekt auszuführen (entnommen aus dem Angular Seed-Projekt auf GitHub), erhalte jedoch weiterhin die Fehlermeldung "Modul ist nicht definiert".
Ich habe gelesen, dass es etwas mit der Reihenfolge der referenzierten JavaScript-Dateien zu tun haben könnte , aber ich kann es scheinbar nicht zum Laufen bringen, also kann hoffentlich einer von Ihnen helfen.
Meine Konfiguration für den Test sieht folgendermaßen aus:
basePath = '../';
files = [
'public / javascripts / lib / jquery-1.8.2.js',
'public / javascripts / lib / angular.js',
'public / javascripts / lib / angular- .js',
'public / app.js. ',
' public / controller / .js ',
' public / directives.js ',
' public / filter.js ',
' public / services.js ',
JASMINE,
JASMINE_ADAPTER,
' public / javascripts / lib / angle- mocks . js ',
' test / unit / *. js '];autoWatch = true;
browser = ['Chrome'];
junitReporter = {outputFile: 'test_out / unit.xml', suite: 'unit'};
Der Service sieht wie folgt aus:
angular.module('myApp.services', []).
value('version', '0.1');
Der Test sieht folgendermaßen aus:
'use strict';
describe('service', function() {
beforeEach(module('myApp.services'));
describe('version', function() {
it('should return current version', inject(function(version) {
expect(version).toEqual('0.1');
}));
});
});
Und der Fehler beim Ausführen des Tests durch testacular ist folgender:
ReferenceError: Modul ist nicht definiert
Antworten:
Ihnen fehlt die Datei angle-mocks.js .
quelle
angular.module
undangular.mock.module
sind nicht gleich. Diewindow.module
Funktion ist ein Alias fürangular.mock.module
. Weitere Informationen finden Sie in dieser Antwort .angular-mocks
in diekarma.conf.js
Datei einfügen und die Tests über Karma und nicht über Jasmine ausführen. Auf diese Weise werden beim Ausführen von Karma dieangular-mocks
Erweiterungen erfasst und in die Umgebung integriert.Ich hatte das gleiche Problem und verstand, warum es nicht funktionierte: Auf das Javascript jasmine.js muss VOR der Datei angle-mocks.js verwiesen werden. In der Tat prüft die angle-mocks.js, ob Jasmine geladen ist, und nur wenn dies der Fall ist, wird die Modulfunktion zum Fenster hinzugefügt.
Hier ist ein Auszug aus Angular Mocks-Code:
(Bearbeiten Sie nach den wenigen Kommentaren zu 'Hacking', die ich unten hatte: Dies ist nur ein Auszug aus dem Code, dies ist nicht etwas, das Sie selbst schreiben müssen, es ist bereits da!)
Kurz gesagt: Referenzieren Sie einfach Ihre jasmine.js vor angle-mocks.js und los geht's.
quelle
Die
window.module
Funktion kommt in angular-mocks.js und ist eine Abkürzung fürangular.mock.module
. Wie in den Dokumenten erwähnt ,module
funktioniert die Funktion nur mit Jasmine.Bei Verwendung von Testacular wird die folgende Beispielkonfigurationsdatei geladen
angular-mocks.js
.Und wie an anderer Stelle vorgeschlagen, können Sie Testacular mit Debug-Protokollierung ausführen, um zu sehen, welche Skripte geladen sind (dasselbe können Sie auch im Inspektor sehen):
Die
angular.mock.inject
Dokumente enthalten ein ziemlich vollständiges Beispiel.quelle
module
jetzt auch mit Mokka funktioniertWir verwenden 'Modul' ohne 'Winkel' in unseren Unit-Tests und es funktioniert gut.
CoffeeScript:
welches kompiliert zu
JavaScript:
Das einzige Mal, dass ich so etwas wie den von Ihnen beschriebenen Fehler sehe, ist, wenn in der Datei testacular.conf.js die Datei angle-mocks.js nicht im Dateibereich aufgeführt ist, bevor die Spezifikationen versuchen, 'module' zu verwenden. Wenn ich es nach meinen Tests in die Liste 'Dateien' schreibe, bekomme ich
(Unsere Tests werden über PhantomJS durchgeführt.)
quelle
Ich hatte angular-mocks.js in meine Karma-Konfiguration aufgenommen, bekam aber immer noch den Fehler. Es stellt sich heraus, dass die Reihenfolge im Dateiarray wichtig ist. (duh) Genau wie im Kopf eines HTML-Dokuments, wenn ein Skript eckig aufruft, bevor es definiert ist, und ein Fehler auftritt. Also musste ich nur meine app.js nach angular.js und angular-mocks.js einfügen.
quelle
Wenn Sie Yeoman und seinen Winkelgenerator verwenden, wird dieser Fehler wahrscheinlich angezeigt. Besonders wenn Sie das Tutorial (._.) Ausführen, habe
ich es behoben, indem ich die Datei angle-mocks.js aus dem Verzeichnis bower_components / angle-mocks in das Verzeichnis test / mock kopiert habe. Natürlich müssen Sie sicherstellen, dass Ihre Datei karma.conf.js korrekt konfiguriert ist.
Schöne Grüße!
quelle
Ich hatte das gleiche Problem, als ich so etwas tat
var module = angular.module('my',[])
. Ich musste sicherstellen, dass es von IIFE umgeben warquelle