web-dev-qa-db-ja.com

Jasmineで$ scope.watch(AngularJS)の変更をどのようにテストしますか?

私は最近、AngularJSで何かを書き始めましたが、この特定のテストをどのように書くのかわかりません。さまざまな状態を持つ「ヘルプリクエスト」モードを構築しています。したがって、コントローラーでは、$ scope.request_mode変数を使用します。ヘルプ要求をアクティブにするためのさまざまなリンクは、その変数を異なる方法で設定します。

次に、ディレクティブ内で、$scope.$watch('request_mode', function(){...});を実行して、要求モードの変更に応じて選択的にアクティブ化または非アクティブ化します。コードはすべてうまく機能しますが、私が抱えている問題はテストにあります。ジャスミンに$scope.$watchそして、それが変更されたときに実際に何でも発射します。

誰かがこれに遭遇したことがあると確信しているので、どんな提案でも大歓迎です。

36
Mike Pelletier

単体テストでは、手動$scope.$digest()または$scope.$apply()を呼び出して$scope.$watch()をトリガーする必要があります。

通常、コード内では、ng-click do $rootScope.$applyのようなディレクティブが背後であなたのために実行されるため、これを行う必要はありません。

92
g00fy