Как проверить директиву функции контроллера?

голоса
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 об ошибке: Объект # не имеет метода «datePickerChange»

Задан 15/02/2013 в 17:45
источник пользователем
На других языках...                            


1 ответов

голоса
1

Ваше объявление директивы является недействительным:

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');
                };
              }
      }
});

Кроме того , чтобы проверить свои директивы , вы должны следовать примерам вы можете увидеть в GitHub репо углового в. ngSwitch является хорошим примером, ИМО

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

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);
});
Ответил 15/02/2013 в 18:01
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more