Ich habe xf array: var xf = [];
Und ich habe eine Funktion ist ein Element in diesem Array und eine Funktion, um es zu verwenden:
Aber wenn ich meine Spezifikation starte:
%Vor%Es macht einen Fehler:
xf.validateUsername ist keine Funktion
Wie kann ich es abdecken?
Die Variable xf
kann nicht außerhalb des Bereichs des Controllers aufgerufen werden (d. h. in den Unit-Testdateien nicht verfügbar).
Sie müssen Folgendes getan haben:
%Vor% Sie könnten die Variable xf
an die MyController-Instanz anhängen, sobald Angular sie instanziiert:
Aber das ist nicht wirklich eine saubere Art, es zu tun. Ein besserer Weg (meiner Meinung nach) wäre, eine Fabrik zu schaffen:
%Vor%Jetzt können Sie die Fabrik in Ihren Controller injizieren, um xf:
zu verwenden %Vor% Schließlich wird es für die Komponententests sehr einfach, die Methode validateEmail
zu testen.
Sie müssen die Datei angular-mocks
der Karma-Konfiguration hinzufügen.
Danke an Paul Podlech und Claies für die Hinweise in den Kommentaren / Antworten.
Ich bin mir nicht sicher, ob du deine Frage vollständig verstanden hast. Aber es gibt ein paar Leute, die denken, dass du falsch liegst:
Wenn Sie die tatsächliche Funktion Ihrer globalen Variablen überprüfen möchten, gehen Sie zur Datei karma.conf.js
und fügen Sie den Pfad js-Datei zur Option files
hinzu:
files: [
...,
'fx-script.js',
...
],
callThrough
sollte verwendet werden, bevor die eigentliche Funktion aufgerufen wird:
it ('checkEmail', function(){
var ctrl = $controller('MyCtrl', { $scope: $scope });
spyOn(window, ctrl.xf.validateUsername).and.callThrough();
ctrl.xf.validateUsername();
});
Ich empfehle Ihnen, Ihre controller
, service
oder globale Skripte separat zu testen und Mocks hinzuzufügen, wenn Sie eine Abhängigkeit oder eine globale Variable injizieren wollen. Wenn Sie also sicher sagen können, welche module
/ script
versagt jederzeit.
Versuchen Sie dies in der Steuerung
%Vor%und das in deinem Test
%Vor%Aber Sie sollten wissen, dass dies Ihr xf-Objekt auf dem Controller verfügbar macht, wie im Kommentar von Claies .
Tags und Links javascript angularjs unit-testing karma-jasmine