16

ディレクティブから $emit をスパイしようとしていますが、どういうわけかスパイに $emit を「聞く」ことができません。

これは私のディレクティブのコントローラーのコードです:

$scope.$on('send', function () {
    console.log('called');
    $scope.$emit('resultSend', {'ok': true, 'data': ''});
});

これは私の単体テストです:

var $rootScope, $compile, elm, element;

beforeEach(inject(function ($injector) {
    $rootScope = $injector.get('$rootScope');
    $compile = $injector.get('$compile');
    elm = angular.element('<test></test>');
    element = $compile(elm)($rootScope);
}));


it('should listen for the send broadcast and emit the resultSend', function () {
    spyOn($rootScope, '$emit');
    $rootScope.$broadcast('send');
    expect($rootScope.$emit).toHaveBeenCalledWith('resultSend');
});

console.log の出力 (「呼び出された」) は Karma によって出力されるため、単体テストのブロードキャスト イベントは機能すると思います。

これは $emit がダウンブロードキャストではなくアップに関係しているのでしょうか。

4

2 に答える 2

3

ディレクティブにコントローラーがある場合は、ディレクティブとは別にそれをテストできますし、テストする必要があります。これが MVC アーキテクチャの要点です。V とは別に C をテストできます。;)

そうは言っても、それは単純なJaneコントローラーのテスト仕様になります.

別のヒント: beforeEach() ブロック (つまり、スパイなど) ですべての設定を行ってから、it() ブロックでアサーションを行う必要があります。

最後に: 設定しているスパイが、テストしているコントローラーに渡すスコープ上にあることを確認してください。

于 2013-10-15T15:25:40.630 に答える