2014-02-17 1 views
3

ng-grid를 사용하여 각도 컨트롤러의 재스민 테스트를 수행했습니다. 나는 각 그리드에 selectRow(1, true); 전화하고 싶지만, 내가 할 때 나는 오류가 TypeError: Object #<Object> has no method 'selectRow'자스민 단위 테스트에서 ng-grid에 selectRow를 호출합니다.

나는이 같은 NG 그리드 설정하는 각 컨트롤러가 있습니다

$scope.myGridOptions = { 
      data : 'myData', 
      multiSelect: false, 
      selectedItems: $scope.mySelectedRow, 
      afterSelectionChange: function(data) {; 
       if($scope.mySelectedRow === undefined){ 
        //do somthing 
       }else{ 
        //do somthing else 
       } 
      } 
     }; 

내가 다음 자스민이를 유닛 테스트, 여기서 inject 함수를 사용하여 컨트롤러를 인스턴스화하고 컨트롤러 $scope과 같게 scope 개체를 설정합니다. 나는 그리드를 포함하지 않는 많은 테스트를 가지고 있으며, 그들은 모두 달리고 잘 통과한다.

it('selecting a row in the table does stuff.', function() { 
     //controller created in before each 
       rootScope.$digest();//needed to get the controller to initialize 
     scope.myGridOptions.$selectRow(1, true); 
     expect(scope.resultOfDoingSomthing).toBe("done"); 
    }); 

더 코드 예제가 필요한 경우 나 댓글에 알려 보자 :이처럼 테스트입니다 그래서

그러나 나는 선택 핸들러 논리를 테스트 할. 배경에 대해서는 테스트를 실행하기 위해 maven jasime:bdd을 사용하고 있으므로 jasmine 구성이 그에 의해 설정됩니다. 예상외의 각도 재스민 단위 테스트가 예상대로 진행되고 있기 때문에 문제가 있다고 생각하지 않습니다. NG 그리드 자바 스크립트가 포함되어 있습니다. 또한 을 변경하지 않고 beforeEach에 추가하려고했습니다. 나는 또한 beforeEach(module("myMod",['ng-grid']));을 추가하려고 시도했다. 그러나 이것은 $injector 오류로 폭발했다.

답변

2

다른 사람에게 다음과 같이하십시오. 내가 한 것은 selectRow를 호출하여 테스트하려는 것이 아니라 afterSelectionChange를 직접 테스트하는 것이다. 내가 리팩토링했다이 효과적으로 이용하려면 :

afterSelectionChange: function(data) {; 
      if($scope.mySelectedRow === undefined){ 
       //do somthing 
      }else{ 
       //do somthing else 
      } 
     } 

당신이 전달 된 데이터를 사용하게 볼 수

afterSelectionChange: function(rowItem, event) {; 
      if(rowItem.entity === undefined){ 
       //do somthing 
      }else{ 
       //do somthing with row rowItem 
      } 
     } 

에.