35

Я только что начал писать что-то с AngularJS, и я не уверен, как начать писать тест для этой конкретной вещи. Я создаю режим запроса справки, который имеет разные состояния. Поэтому в моем контроллере я использую переменную $ scope.request_mode. Различные ссылки для активации запросов справки устанавливают эту переменную на что-то по-другому.

Внутри моей директивы я делаю $scope.$watch('request_mode', function(){...});, чтобы избирательно активировать или деактивировать вещи по мере изменения режима запроса. Код работает отлично, но проблема, с которой я столкнулась, - это тестирование. Кажется, я не могу заставить Жасмин забрать $scope.$watch и на самом деле выстрелить в него, когда он изменится.

Я уверен, что кто-то сталкивался с этим раньше, поэтому любые предложения были бы очень оценены.

+1

Что вы пробовали? У вас есть какой-то существующий тестовый код, на который мы можем смотреть? –

ответ

88

В модульных тестов нужно вручную вызова $scope.$digest() или $scope.$apply(), чтобы вызвать $scope.$watch().

Обычно в вашем коде вам не нужно будет этого делать, поскольку директивы вроде ng-click do $rootScope.$apply для вас за кулисами.

+3

, который должен быть помечен как ответ, область действия. $ Apply() работает для меня – Anonymous

+3

Всегда ли нужно, чтобы $ apply вызывался дважды? То есть один раз перед изменением наблюдаемого значения и еще раз после этого, иначе мои ожидания будут ложными. Я не могу найти пример, в котором кто-то дважды вызывал его. – nymo

+3

Да, вызов мне дважды был необходим и для одного из моих тестов. –