Ein Neuling Jasmine / Winkelfrage.
Ich habe eine benannte Funktion in einem Controller wie folgt:
%Vor%Ich muss diese Funktion testen und versuche, die folgende Jasmine-Spezifikation aufzurufen:
%Vor% Anstatt Dinge auszuarbeiten, führe ich den folgenden Fehler aus: TypeError: Object #<DummyCtrl> has no method 'doSomething'
. Ich nehme an, das ist etwas sehr Einfaches, das ich nicht verstehe.
In gewissem Sinne ist die Verwendung solcher Funktionen privat und kann nicht von außerhalb der Funktion aufgerufen werden. Werfen Sie einen Blick auf diesen Link: Ссылка
Im Wesentlichen wird gesagt, dass eine Funktion / ein Objekt in Javascript vorhanden ist, alles mit einem this.
Präfix ist öffentlich und alles mit einem var
Präfix ist privat.
Für Angular können Sie auf jeden Fall private Variablen und Funktionen haben, um nicht nur die Speichernutzung der $scope
-Variablen zu verringern. Private Funktionen sollten von Ihren $scope
-Objekten aufgerufen werden, um Werte zu erhalten, die vom Benutzer angezeigt / verwendet werden sollen. Versuchen Sie es zu ändern:
Und dann testen Sie die private Funktion mit:
%Vor% Die function DummyCtrl
, die Sie für die Controller-Registrierung bereitstellen, wird von Angular als Konstruktor verwendet. Wenn Sie möchten, dass die Controller-Instanz function doSomething
freigibt, ohne sie an $scope
anzuhängen, sollten Sie sie an this
anhängen.
Versuchen Sie,
zu ändern %Vor%bis
%Vor%und dein Test sollte funktionieren.
Sie können diesen Ansatz hier sehen: Ссылка . Werfen Sie auch einen Blick auf diese SO Frage: Wie testbare Controller mit privaten Methoden in AngularJs schreiben?