2014-09-17 8 views
1

пытается проверить свою директиву с жасмином, но не подведет, где он должен из-за неправильной даты (.demo):Жасмин тест не работает для angulardirective?

describe("Unit: Testing Directives - ", function() { 
    var $compile, $rootScope; 
    beforeEach(module('app')); 
    beforeEach(inject(function(_$compile_, _$rootScope_){ 
     $compile = _$compile_; 
     $rootScope = _$rootScope_; 
    })); 

    describe("Date Validation Directive - ", function(){ 
    it('should show an date as valid', function(){ 
     $rootScope.demo = '10/01/881'; 
     var templateHTML = angular.element('<input class="blah" type="tel" ng-model="demo" my-date />'); 
     var element = $compile(templateHTML)($rootScope); 
     $rootScope.$digest(); 
     expect(element.hasClass('ng-valid')).toBe(true); 
     expect(element.hasClass('ng-invalid')).toBe(false); 

    }); 
    }); 
}); 

это то, что моя директива выглядит следующим образом:

var app = angular.module('app', []); 

app.directive("myDate", function() { 
    return { 
    restrict: "A", //only activate on element attribute 
    require: "ngModel", //get hold of NgModelController 
    link: function (scope, elm, attrs, ctrl) { 

     ctrl.$parsers.unshift(function (viewValue) { 
      var date_regexp = /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/; 
      if (date_regexp.test(viewValue)) { 
       // it is valid 
       ctrl.$setValidity("myDate", true); 
       return viewValue; 
      } else { 
       // it is invalid, return undefined (no model update) 
       ctrl.$setValidity("myDate", false); 
       return undefined; 
      } 
     }); 
    } 
    }; 
}); 

как можно Я заработал? plunkr: http://plnkr.co/edit/GYBvynRqdTTqXxnk7thN?p=preview

ответ

0

Это связано с программным назначением значения модели. $parsers запускается, когда значение изменяется с помощью DOM. При программном изменении значения модели выполняется $formatters. Поэтому в вашей директиве, если вы измените $parsers на $formatters, он не пройдет тест, как вы ожидали.

Plnkr

Однако вам может понадобиться оба в вашей директиве и ваше реальное тестирование должно быть, чтобы проверить логику внутри парсеров/форматтеров, не так, как он запускается (это уже проверено на угловой) или как классы добавляются угловыми. Если ваши проверки проверяются через службу валидатора или даже контроллер вашей директивы, который обеспечивает проверку, которая была бы хорошей мишенью для тестирования.