Ich habe einen Controller mit einer init () -Methode, die bei Instanziierung gestartet wird. Es macht eine Menge Dinge, die für meine App in einer Live-Umgebung nützlich sind, aber das vermasselt meine Unit-Tests mit Spionen.
Gibt es eine Möglichkeit, den Aufruf zu verhindern, wenn der Controller in der Komponententestumgebung instanziiert wird? Oder vielleicht eine Möglichkeit, es automatisch im Webapp-Kontext aufrufen zu lassen, ohne am Ende des Controller-Codes einen expliziten Aufruf von init () zu machen?
Es ist ein bisschen schwierig, eine genaue Anleitung zu geben, ohne ein Live-Codebeispiel zu sehen (deshalb ist es normalerweise eine gute Idee, ein Plunk anzugeben, das eine Vorlage für Jasmine-Tests enthält), aber es klingt wie Ihre init
-Methode einige Setup-Logik, die abhängig von der Umgebung unterschiedlich sein sollte. Wenn dies der Fall wäre, würde man diese Initialisierungslogik in einen dedizierten Dienst kapseln und diesen Dienst während des Testens vortäuschen (das ist genau das, was @Joe Dyndale vorschlägt).
Vorausgesetzt, dass Ihr Controller wie folgt aussieht:
%Vor%Es könnte umgestaltet werden auf:
%Vor%und dann könnte der Test mit Spott so aussehen:
%Vor%Schließlich hier ist ein Live-Code in Plunker
Tags und Links angularjs initialization jasmine