35

Ich habe gerade angefangen, etwas mit AngularJS zu schreiben, und ich bin nicht sicher, wie man einen Test für dieses spezielle Ding schreibt. Ich erstelle einen "Hilfe anfordern" -Modus, der verschiedene Zustände hat. In meinem Controller verwende ich die Variable $ scope.request_mode. Die verschiedenen Links zum Aktivieren von Hilfeanforderungen setzen diese Variable auf etwas anderes.

Dann mache ich in meiner Direktive eine $scope.$watch('request_mode', function(){...}); um selektiv Dinge zu aktivieren oder zu deaktivieren, wenn sich der Anfragemodus ändert. Der Code funktioniert alles gut, aber das Problem, das ich habe, ist mit dem Testen. Ich kann nicht scheinen, Jasmine dazu zu bringen, die $scope.$watch aufzuheben und wirklich irgendetwas zu feuern, wenn es sich ändert.

Ich bin mir sicher, dass jemand schon einmal darauf gestoßen ist, also würden alle Vorschläge sehr geschätzt werden.

+1

Was haben Sie bisher versucht? Haben Sie einen vorhandenen Testcode, den wir uns ansehen können? –

Antwort

88

In Komponententests müssen Sie manuell Anruf $scope.$digest() oder $scope.$apply()$scope.$watch() auszulösen.

Normalerweise in Ihrem Code müssten Sie dies nicht tun, da Anweisungen wie ng-click tun $rootScope.$apply für Sie hinter den Kulissen.

+3

das muss als Antwort, Bereich markiert werden. $ Apply() funktioniert für mich – Anonymous

+3

Ist es jemals der Fall, dass $ apply zweimal aufgerufen werden muss? I.e. einmal bevor ich den beobachteten Wert ändere und nochmal danach, sonst sind meine Erwartungen falsch. Ich kann kein Beispiel finden, in dem jemand es zweimal angerufen hat. – nymo

+3

Ja, zweimal zu telefonieren war auch notwendig für mich in einem meiner Tests. –

Verwandte Themen