2016-03-22 12 views
0

放射をテストする必要がある角度指令に対してジャスミンユニットテストを行うにはどうすればよいですか?放射をテストする必要がある角度指示のジャスミン単位テストを行うにはどうすればよいですか?

このディレクティブは属性ディレクティブであり、私がテストする必要があるディレクティブの中にemitがあります。

これは最善の方法ですか?

これが私の現在のテストです:

//broadcast test: 
    describe('broadcast called', function() { 

      var rootScope, testService; 

      beforeEach(inject(function(_$rootScope_, $injector) {    
       rootScope = _$rootScope_; 

       testService = $injector.get('testFactory'); 

       spyOn(rootScope, "broadcast"); 
      })); 

      it('should be broadcast', function() { 
       testService.emitTest(); 
       expect(rootScope.broadcast).toHaveBeenCalledWith('test1'); 
      }); 
    }); 

現在のコード:

appservicemod.factory('testFactory', ['$rootScope', function ($rootScope) { 

     var emitTest = function(){ 

        $rootScope.$broadcast('test1'); 

     } 

     return { 
      emitTest: emitTest 
     } 
    } 
]); 
+1

「emit」メソッドをスパイし、それがcalleであることを確認します期待される引数で呼び出されると期待したとき – Phil

+0

'testService.emitTest'は何をするのですか?これを知らずに何が間違っているのか分からない。 –

+0

は、内部にブロードキャストを持つ関数の名前です。私も上記を追加します – AngularM

答えて

1

あなたの現在のアプローチはいくつかの問題を除いて、正常に動作ようだ:

  • それは$broadcastする必要があり、ないbroadcastどこでも
  • あなたはこれらの問題を解決した場合は何もbeforeEach(module('app'))はあなたのコード

にありません、それは動作します:http://jsfiddle.net/MMiszy/c4fz58sp/1/

describe('broadcast called', function() { 
    var $rootScope, testService; 

    beforeEach(module('app')); 

    beforeEach(inject(function(_$rootScope_, $injector) {    
     $rootScope = _$rootScope_; 
     spyOn($rootScope, "$broadcast"); 
     testService = $injector.get('testFactory'); 
    })); 

    it('should broadcast', function() { 
     testService.emitTest(); 
     expect($rootScope.$broadcast).toHaveBeenCalledWith('test1'); 
    }); 
}); 
+0

何が期待されますか? – AngularM

+0

放送が放映されたかどうか確認したいですか?上記の例では、test1をtest100に変更することはできますが、それでも有効なテストのようには見えません。 – AngularM

+0

基本的にブロードキャストしたい – AngularM

1

スパイ

spyOn(scope, 'emit'); 

とテストにそれが呼び出されたかどうかを確認

expect(scope.emit).toHaveBeenCalledWith('valueItShouldBeCalledWith'); 
+0

私は工場で同じことをやっていますか? – AngularM

+0

scope.emitコールの監視に関しては違いはありません – Austin

+0

上記の私の現在のブロードキャストの例を追加しました。しかし、それを働かせることはできません – AngularM