2013-06-14 11 views
35

Niedawno zacząłem pisać coś z AngularJS i nie jestem pewien, jak napisać test dla tej konkretnej rzeczy. Buduję tryb "Żądania pomocy", który ma różne stany. Tak więc w moim kontrolerze używam zmiennej $ scope.request_mode. Różne linki do aktywacji żądań pomocy ustawiają tę zmienną na coś innego.

Następnie w mojej dyrektywie wykonuję $scope.$watch('request_mode', function(){...});, aby selektywnie aktywować lub dezaktywować elementy w miarę zmiany trybu żądania. Kod działa dobrze, ale problemem jest testowanie. Nie mogę zmusić Jasmine, żeby podniosła $scope.$watch i faktycznie strzela wszystko, kiedy się zmieni.

Jestem pewna, że ​​ktoś już do tego dołączył, więc wszelkie sugestie będą bardzo mile widziane.

+1

Co próbowaliście do tej pory? Czy masz jakiś istniejący kod testowy, który możemy obejrzeć? –

Odpowiedz

88

W swoich testach jednostkowych musisz ręcznie połączeń $scope.$digest() lub $scope.$apply() wywołać $scope.$watch().

Zwykle w swoim kodzie nie musiałbyś tego robić, ponieważ dyrektywy takie jak ng-click do $rootScope.$apply dla Ciebie za kulisami.

+3

, która musi być oznaczona jako odpowiedź, zakres. $ Apply() działa dla mnie – Anonymous

+3

Czy kiedykolwiek zdarza się, że $ apply musi być wywołane dwa razy? To znaczy. raz przed zmianą oglądanej wartości i jeszcze raz po, w przeciwnym razie moje oczekiwania są fałszywe. Nie mogę znaleźć przykładu, w którym ktoś wezwał to dwa razy. – nymo

+3

Tak, dzwonienie do niego dwukrotnie było również niezbędne w jednym z moich testów. –

Powiązane problemy