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: Object # has no method 'datePickerChange' がスローされます

4

1 に答える 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');
                };
              }
      }
});

それを超えて、ディレクティブをテストするには、Angularのgithubリポジトリにある例に従う必要があります。ngSwitchは良い例です、IMO

基本的な考え方は、$ compileを使用してディレクティブを実行し、それを調べることです。

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);
});
于 2013-02-15T17:01:19.333 に答える