2016-09-24 5 views
0

は私が見えるコントローラ機能を持っているように:

$scope.clearMarkers = function(){ 
    for(var i = 0; i < $scope.markers.length; i++){ 
     $scope.markers[i].setMap(null); 
    } 
    $scope.markers = []; 
}; 

のような上記のルックスのための私のユニットテスト:setMap()メソッドが呼び出されている必要があることを主張する時には、上記のテストが出てエラーになります

describe('clearMarkers Test', function(){ 
    it('should call the setMap() method on each array object inside of scope.markers and then set scope.markers to an' + 
     'empty array', function(){ 
     scope.markers = [{ 
      setMap: jasmine.createSpy('scope.markers[0]#setMap') 
     }, { 
      setMap: jasmine.createSpy('scope.markers[1]#setMap') 
     }, { 
      setMap: jasmine.createSpy('scope.markers[2]#setMap') 
     }]; 
     scope.clearMarkers(); 
     expect(scope.markers[0].setMap).toHaveBeenCalledWith(null); 
     expect(scope.markers[1].setMap).toHaveBeenCalledWith(null); 
     expect(scope.markers[2].setMap).toHaveBeenCalledWith(null); 
     expect(scope.markers).toEqual([]); 
    }); 
}); 

$scope.markers = []$scope.clearMarkers()に設定すると、作成したスパイも削除されるためです。

$scope.markers = []$scope.clearMarkers()にコメントアウトすると、私のsetMap()アサーションは期待通りに機能します。

この状況で私のスパイをどのように保存しますか?

答えて

0

スパイは、コールの瞬間に、オブジェクトメソッドでなければなりませんが、彼らはアサートされるオブジェクトのメソッドである必要はありません。

var markerSpy1 = jasmine.createSpy(); 
... 

scope.markers = [ 
    { setMap: markerSpy1 }, 
    ... 
]; 

scope.clearMarkers(); 
expect(markerSpy1).toHaveBeenCalledWith(null); 
... 
expect(scope.markers).toEqual([]); 
+0

を解決し、あなたの決定を説明してください。 – estus

+0

@LloydBanks質問は無視され、フィードバックはありませんでした。ソリューションはあなたにとって有益でしたか?そうした場合は、回答を受け入れることを検討してください。 – estus

0

あなたはこのように行うことができ、実際の機能にspysを作成し、それらかどうかをチェックしますが呼び出されているか否かを示す。

describe('clearMarkers Test', function(){ 
it('should call the setMap() method on each array object inside of scope.markers and then set scope.markers to an' + 
    'empty array', function(){ 

    spyOn(scope.markers[0], 'setMap')// setting spy on this function 
    spyOn(scope.markers[1], 'setMap') 
    spyOn(scope.markers[2], 'setMap') 
    scope.markers = [{ 
     setMap: jasmine.createSpy('scope.markers[0]#setMap') 
    }, { 
     setMap: jasmine.createSpy('scope.markers[1]#setMap') 
    }, { 
     setMap: jasmine.createSpy('scope.markers[2]#setMap') 
    }]; 
    scope.clearMarkers(); 
    expect(scope.markers[0].setMap).toHaveBeenCalledWith(null); 
    expect(scope.markers[1].setMap).toHaveBeenCalledWith(null); 
    expect(scope.markers[2].setMap).toHaveBeenCalledWith(null); 
    expect(scope.markers).toEqual([]); 
}); 

});あなたにもスパイの機能を呼び出すようにしたい場合は

だけ使用します。

spyOn(scope.markers[0], 'setMap').and.callThrough() 

ホープこれはあなたの問題、あなたが正しい答えをdownvotingている

関連する問題