Angularでイベントをテストするにはどうすればいいですか? 質問する

Angularでイベントをテストするにはどうすればいいですか? 質問する

イベントが正しく発行またはブロードキャストされ、イベントが手動でトリガーされるかどうかをテストする必要があります。

これを行う最善の方法は何ですか?

ベストアンサー1

イベントの発火とキャッチのテストだけが必要な場合は、次のようにします。特定のイベントが確実に発火 ($emitまたは) されるようにするには、スパイを使用するのが最適です。または を$broadcast呼び出すスコープへの参照が必要で、次のようにします。$emit$broadcast

spyOn(scope, "$emit")
//run code to test
expect(scope.$emit).toHaveBeenCalledWith("MY_EVENT_ID", other, possible, args);

で渡される引数が必要ないか、気にしたくない場合は、に を配置し、イベントが発行されたことを認識するフラグを設定$emitできます。次のようになります。$on$rootScope

var eventEmitted = false;
$rootScope.$on("MY_EVENT_ID", function() {
   eventEmitted = true;
});
//run code to test
expect(eventEmitted).toBe(true);

イベントがキャッチされたときに実行される機能 ( $on) をテストする場合は、少し簡単です。関数$rootScopeから を取得しinject、目的のイベントを送信するだけです。

$rootScope.$broadcast("EVENT_TO_TEST", other, possible, args);
//expects for event here

さて、このイベント処理はディレクティブまたはコントローラ(または両方)で行われると思います。ディレクティブテストの設定については、https://github.com/vojtajina/ng-directive-testingコントローラテストの設定については、https://github.com/angular/angular-phonecat/blob/master/test/unit/controllersSpec.js#L27

おすすめ記事