2016-10-20 4 views
0

나는 특정 형식으로 텍스트를 검증하는 지침이 있습니다테스트 각도 지침

angular.module('app') 
    .directive('validNumber', validNumber); 

function validNumber() { 
    var directive = { 
     restrict: 'A', 
     require: '?ngModel', 
     link: linkFunc 
    }; 

    return directive; 

    function linkFunc(scope, element, attrs, ngModelCtrl) { 
     if (!ngModelCtrl) { 
      return; 
     } 

     ngModelCtrl.$parsers.push(function (val) { 
      if (angular.isUndefined(val)) { 
       var val = ''; 
      } 

      var clean = val.replace(/[^0-9\.]/g, ''); 
      var decimalCheck = clean.split('.'); 

      if (!angular.isUndefined(decimalCheck[1])) { 
       decimalCheck[1] = decimalCheck[1].slice(0, 2); 
       clean = decimalCheck[0] + '.' + decimalCheck[1]; 
      } 

      if (val !== clean) { 
       ngModelCtrl.$setViewValue(clean); 
       ngModelCtrl.$render(); 
      } 
      return clean; 
     }); 

     element.bind('keypress', function (event) { 
      if (event.keyCode === 32) { 
       event.preventDefault(); 
      } 
     }); 
    } 
} 

지금 내가 추가 한 내부 파서 기능을 검사 할 난 그냥 그것을 할 수 . 어떻게 그 함수에 대한 호출을 호출 할 수 있습니까? 결과를 어떻게 테스트 할 수 있습니까? 내 아주 실패한 테스트는 다음과 같습니다

describe('validNumber directive specs', function() { 
    var scope, compile; 

    var validHtml = '<form name="testForm"><input name="test" type="text" valid-number ng-model="str" /></form>'; 

    beforeEach(function() { 
     angular.mock.module('dashboardApp'); 
     module(bootstrapperMock); 
     inject(function (_$rootScope_, _$compile_) { 
      scope = _$rootScope_.$new(); 
      compile = _$compile_; 
     }); 
    }); 

    describe('When a key press occures', function() { 
     it('should :(', function() { 
      scope.str = 0; 
      var element = compile(validHtml)(scope); 
      var viewValue = 2, input = element.find('input'); 
      scope.str = viewValue; 
      scope.$digest(); 
      var e = angular.element.Event('keypress keydown'); 
      e.which = 50; 
      element.trigger(e); 
      scope.$digest(); 
     }); 
    }); 
}); 

내가 두 모델을 변경하고 키 누르기를 유발했습니다. 감사합니다.

답변

0

다음 작품 : 나는 또한이 사양에서 HTML을 업데이트

describe('When a key press occures', function() { 
     it('when a key press', function() { 
      var expected = ''; 

      var element = compile(validHtml)(scope); 
      element.val('asda'); 
      element.trigger('input'); 

      var actual = element.val(); 

      expect(expected).toBe(actual); 
     }); 
    }); 

:

var validHtml = '<input name="test" type="text" valid-number ng-model="str" />'; 

여기에 마법이 요소에 대한 '입력'을 유발하는 것입니다.