2015-01-06 2 views
3

jasmine을 사용하여 하나의 지시문을 테스트하려고합니다. 지정 :재스민 테스트 범위 및 범위 참조로 전달

angular.module('app').directive('test', 
    function(){ 
     return{ 
      restrict: 'A', 
      scope:{data:'='}, 
      link:function($scope,element,attrs){ 
      ..... 
       $scope.data=[200,300]; 
      } 
     } 
    } 
    ]); 

자스민 :

describe('test', function(){ 
    beforeEach(module('test')); 
    beforeEach(inject(function($rootScope,$compile){ 
     scope = $rootScope.$new(); 
     element = '<div test data="{{data}}"></div>';  
     scope.data = [100,200] 
     element = $compile(element)(scope); 
     scope.$digest(); 
    })); 
    it('is a test',function(){ 
     expect(data).toBe([100,200]); 
    }); 
} 

하고 해당 범위로

가 "="사용하고, 그것을 기준을 통과. 그러나 테스트를 실행할 때 구문 오류가 있습니다. 토큰 '데이터'가 예상치 못한데 [{{데이터}}] 식의 열 3에서 [:]이 (가) 필요합니다. 만약 내가 그냥 <test data={{data}}></test>와 함께 테스트 템플릿에서 div 제거, 잘 작동합니다. 그리고 "="를 "@"로 바꾸면 범위가 잘됩니다. 누구나 범위에 대한 참조를 전달하는 방법에 대한 제안을 나에게 줄 수 있습니까? 감사.

답변

5

2 일 동안 시도한 후에 마침내 할 수있었습니다.

describe('test', function(){ 
beforeEach(module('test')); 
beforeEach(inject(function($rootScope,$compile){ 
    $scope = $rootScope.$new(); 
    element = '<div test data="databind"></div>';  
    $scope.databind = [100,200] 
    element = $compile(element)($scope); 
    $scope.$digest(); 
})); 
it('is a test',function(){ 
    tests....... 
}); 

그리고 {{}}이 (가) 여기에서 작동하지 않은 것으로 보입니다. 범위를 사용하여 참조로 전달할 수 있습니다.

+0

놀랍습니다. 공유해 주셔서 감사합니다. 오랜 시간 시행 착오를 저지했습니다. – wdanda