Be-verspottet in einer AngularJS unit test
Ich versuche, meine setup-AngularJS-Anwendung zu testen, Controller, Routen, Vorlagen und so weiter, aber ich habe ein Problem immer einige helper-Methoden zur Verfügung gestellt von der angular-mocks.js zu arbeiten (nämlich Modul und injizieren).
Ich bin mit testacular zu laden, bis die test-suite mit den folgenden Dateien Hinzugefügt, bevor die specs:
files = [
MOCHA,
MOCHA_ADAPTER,
'../application/lib/angular.min.js',
'./lib/angular/angular-mocks.js',
'./lib/angular/angular-scenario.js',
'../application/application.js',
'./lib/chai.js',
'./lib/chai-should.js',
'./lib/chai-expect.js',
'./spec/**/*.js'
];
So weit So gut, aber wenn ich die tests auszuführen, bekomme ich diese Ausgabe:
ReferenceError: Can't find variable: module
Nicht sicher, wo diese geladen wird. Bin ich etwas fehlt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, was zu überprüfen ist, dass alle diese Dateien sind immer geladen in der test-browser. Es ist überraschend einfach, ein Pfad falsch in deiner config haben und nicht erkennen, es. Wenn Sie testacular mit
autowatch
können Sie navigieren zuhttp://localhost:9876/context.html
mit einem browser und verwenden Sie developer tools untersuchen Elemente/Ressourcen - /Netzwerk-und sehen, ob etwas fehlt.Wenn alles gut ist und du immer noch Probleme haben, veröffentlichen einige der test-code, und ich nehme einen Blick.
UPDATE: Es scheint (seltsam) aus den Kommentaren in der Quelle für die angular-mocks.js (Zeile 1635), die
window.module
ist nur verfügbar, mit Jasmin. Wie es aussieht, bist du mit Mokka anstelle von Jasmin. Dies ist sehr wahrscheinlich der Täter.ANTWORT:
Kann ich nicht Recht nehmen Kredit für das Matsko, da Sie dachte, es selbst heraus... aber es stellt sich heraus, dass die aktuelle AngularJS stabil download und eckige Samen enthalten eine ältere version von ngMock, der nicht mit den Mokka. Manuell ersetzen die mock-Datei mit den neuesten aus dem github repo behebt das problem. Froh, dass ich helfen konnte 😉
./lib/angular/angular-scenario.js
dort. Könnte es sein das problem verursacht...Lief ich in dieser Frage heute und ich wollte die anderen mit eine vollständige Zusammenfassung der notwendigen Schritte, damit es funktioniert. Lassen Sie uns zunächst sagen, Sie haben ein Modul mit dem Namen myApp. Innerhalb dieses Moduls gibt es einen Dienst namens " myModel. die myModel-service hat eine Methode namens getItems().
wget https://raw.github.com/angular/angular.js/master/src/ngMock/angular-mocks.js
im richtigen Verzeichnis. Wenn Sie verwenden Sie ein ordnungsgemäß konfiguriert Sublime, vim kann es auch ganz einfach ziehen Sie es nach unten für Sie.beforeEach(module('myApp'));
oder was auch immer Sie mit dem Namen Ihrer Haupt-Modul.beforeEach(inject(function(myModel) {
mymodel = myModel;
}));
sonst kann man einfach Spritzen, wo es gebraucht wird. Jetzt die mymodel-variable (Achtung: dies ist die variable, der Sie zugewiesen, in der beforeEach oben) verfügbar sein wird, um Sie für die Prüfung in Ihrem nächsten Blöcke. Zum Beispiel, Sie können jetzt schreiben:
describe('when fetched', function() {
it('should return 3 items', function() {
//console.log(mymodel.getItems());
expect(mymodel.getItems()).to.have.length(3);
});
});