イベントが正しく発行またはブロードキャストされ、イベントが手動でトリガーされるかどうかをテストする必要があります。
これを行う最善の方法は何ですか?
ベストアンサー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