2013-02-15 3 views
0

У меня есть функция в моем контроллере, и я пытаюсь проверить и не могу найти никаких ресурсов. Я имею в перед каждымКак проверить функцию контроллера?

    before each { 
        scope = $rootScope ; 
        $compile(element)(scope); 
        scope.$digest(); 
        } 


      it('should update days when datepicker is changed', function() { 
       scope.seldate = new Date('4/11/2014'); 
       scope.stdate = new Date('4/1/2014'); 
       scop`enter code here`e.days = 10; 
       scope.$digest(); 
       scope.$apply(function() { 
        scope.seldate = new Date('4/12/2014'); 
        scope.datePickerChange(); // This is a function in my directive controller 
       }); 
       expect(scope.days).toBe(11); 

      }); 

app.directive('mydirective',function(){ 
     return { 
       restrict:'E', 
       scope:{ 
       days: '=', 
       selectedDate: '=', 
       startDate: '=' 

       }, 
       $scope.datePickerChange = function() { 
        //Sod is helper for start of the day with hours/mins/seconds set to 0 
       $scope.days = moment(new Date($scope.selectedDate)).sod().diff($scope.getStartDate(), 'days'); 
       }; 
      }; 


      }); 

Это бросает TypeError ошибка: Объект # не имеет никакого метода

ответ

1

Ваше заявление директивы «datePickerChange» недействителен:

app.directive('mydirective',function(){ 
     return { 
       restrict:'E', 
       scope:{ 
       days: '=', 
       selectedDate: '=', 
       startDate: '=' 
       }, 
       link: function(scope, elem, attrs) { 
       scope.datePickerChange = function() { 
        //Sod is helper for start of the day with hours/mins/seconds set to 0 
        scope.days = moment(new Date($scope.selectedDate)) 
           .sod().diff($scope.getStartDate(), 'days'); 
       }; 
       } 
     } 
}); 

Кроме того, чтобы проверить свои директивы вы должны следовать примерам, которые вы можете увидеть в реестре guthub Angular. ngSwitch is a good example, IMO

Основная идея заключается в том, что вы используете компиляцию $, чтобы выполнить свою директиву и изучить ее.

it('should do something', inject(function($rootScope, $compile) { 
    var scope = $rootScope.$new(); 
    var element = $compile('<my-directive></my-directive>')(scope); 

    //assert things. 
    expect(scope.days).toEqual(somethingHere); 
    scope.datePickerChange(); 
    expect(scope.days).toEqual(somethingElse); 
}); 
Смежные вопросы