Das Testen eines Blocks mit run(..)
ist so einfach wie das Laden von module(..)
in Jasmine .
Der gesamte folgende Code ist in diesem Plünderer verfügbar.
>Beachten Sie, dass das Markup in dieser App nicht relevant ist.
Beachten Sie, dass der Test bestanden wird
(1)
und (2)
, werden während der normalen Ausführung der App protokolliert. (3)
bis (5)
werden ausgegeben, während der Test ausgeführt wird. run
-Block ausgeführt beforeEach...run
ausgeführt, dann beforeEach
und schließlich der Block it
. beforeEach
ist nicht nützlich für das Unit-Testen eines run
Blocks (beachten Sie, dass Sie eine beforeEach
einfügen können Blockieren Sie vor beforeEach(module('myapp'));
, wenn Sie jedoch versuchen, einen Injektor in diesem Block zu erstellen, wird Ihr Test fehlschlagen. Und schließlich können wir daraus schließen, dass der oben stehende Code ist, wie Sie einen run
-Block testen können. Was Ihren speziellen Test betrifft, wird es mit diesem Wissen möglich sein, eine Einheit zu konstruieren testen Sie mit Dependency Injection Mocking und < a href="https://github.com/pivotal/jasmine/wiki/Spies"> Jasmins toHaveBeenCalled()
assertion .
Eine einfache Methode wäre das Speichern eines Authentifizierungsobjekts in $ rootScope. Erwarten Sie in Ihrem Komponententest, dass der Wert leer oder undefiniert ist, füllen Sie dann das Objekt in Ihrem Dienst aus, und führen Sie einen erneuten Test mit dem Wert oder der Länge des Objekts durch.
Ich habe das noch nicht getestet, aber ich bin mir ziemlich sicher, dass es so funktioniert. Die app.run
-Methode soll ausgeführt werden, sobald das angegebene Modul alle seine Abhängigkeiten geladen hat, aber bevor es irgendwelche Controller initialisiert. In Ihrem Test (vorausgesetzt Sie verwenden Jasmin) rufen Sie diesen Initialisierer auf, indem Sie Folgendes tun:
Dieser Aufruf von module('MyApp')
initialisiert das Modul, welches "sollte" (in der Theorie, weil ich es noch nicht getestet habe) sofort danach die run-Methode aufruft. Das bedeutet, dass Sie den Laufblock testen können, indem Sie etwas anderes tun:
Ich bin vielleicht völlig daneben, aber ich glaube, das sollte dich beginnen. Hoffe es hilft.
Ich hatte ein ähnliches Problem und beschloss, alles in einen Application-Level-Service zu packen. Für mich fühlte es sich etwas unordentlich und schlecht organisiert an - vor allem, wenn alles ordentlich ist und den eckigen Weg geebnet hat. Der Laufblock fühlte sich ein wenig wie eine Müllhalde an.
So, wie wir Zugang zu D.I. Im Gegensatz zum Config-Block können wir einfach unseren gesamten Code in einen Dienst stecken und ihn über eine Init-Methode auslösen.
Anwendungsdienst
%Vor%Methode ausführen
%Vor%Unser Application Service kann nun für all die Dinge zuständig sein, die am Anfang der App erledigt werden müssen - es ist nur eine einfache Fabrik, damit wir die Scheiße austesten können - und wir können sie bei Bedarf ergänzen .
Als Nebenbemerkung bevorzuge ich ngmin , um meine angularen Verkleinerungsprobleme zu beheben - führt zu einem saubereren, besser lesbaren Code für die Entwickler.
Tags und Links angularjs karma-runner