あなたはJasmineとKarmaを使用していると述べているので、私はあなたが単体テストであると仮定します。あなたが "単体テスト"のテストをしているならば、各コントローラを個別にテストし、すべての注入されたサービスを盗んだり、スパイしたりする必要があります。
beforeEach(inject(function ($rootScope, $controller) {
rootScope = $rootScope;
scope = $rootScope.$new();
controller = $controller('MyCtrl as ctrl', {
'$scope': scope
});
}));
it('', function(){
//Arrange
controller.counter = 0; // Your controller is listening on scope.$on to update this counter.
//Act
rootScope.$broadcast('xyz', {});
//Assert
expect(controller.counter == 1).toBe(true);
rootScope.$broadcast('xyz', {});
expect(controller.counter == 2).toBe(true);
rootScope.$broadcast('xyz', {});
expect(controller.counter == 3).toBe(true);
});
ブロードキャストには注意してください。ドメインイベント(モデルの更新/削除/作成)、またはグローバルなもの(サインイン、サインアウト)のみが$ブロードキャストで移動する必要があります。それ以外の場合は、service +ディレクティブに置き換える必要があります。一例は角度素材https://material.angularjs.org/latest/api/service/ $ mdDialogであり、どこからでも開閉できるバッキングサービスを持つ1つの指令です。
私はあなたのテストメソッドのスレッドがuniqスレッドとして出現していると思います。なぜなら、クロスライブラリーがマルチスレッドを持つことができなかったからです。 特別なテストケースのために、メインコントローラにイベント初期化ファクトリを書き込もうとすることができます。私は考えていない – dewelloper