Testen der benannten Funktion in einem Controller

8

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.

    
jbenowitz 18.06.2013, 22:16
quelle

2 Antworten

5

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:

%Vor%

Und dann testen Sie die private Funktion mit:

%Vor%     
Tim Withers 18.06.2013, 22:35
quelle
18

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?

    
yianis 26.11.2013 21:11
quelle

Tags und Links