2015-06-25 4 views
0

Я принимаю детские шаги в Жасмине, пожалуйста, несите меня за любые вопиющие ошибки. Я пишу тестовые примеры, чтобы проверить, не является ли метод контроллера - transformData называемые, детали нижеЖасмин - модульное тестирование директивы: получение «undefined» не является объектом

Моя Директива

angular.module('myModule') 
.directive('myDirective', [ function() 
{ 
    'use strict'; 
    return { 
     restrict: 'E', 
     templateUrl: '/static/quality/scripts/directives/hh-star-rating.html', 
     scope: { 
      varA:'@', 
     }, 
     controller: [ 
      '$scope', '$controller', 
      function ($scope, $controller) { 
       $controller('otherController', {$scope: $scope}) 
        .columns(
         $scope.x, 
         $scope.y, 
         $scope.series 
        ); 
        $scope.transformData = function(data) 
        { 
         /// does something; 

         return data; 
        }; 
      } 
     ], 

Мой Spec

describe('directive - hh-star-ratings', function() { 
'use strict'; 
angular.module('myModule', []) 
.directive('myContainer', function() { 
    return { 
     restrict: 'E', 
     priority: 100000, 
     terminal: true, 
     template: '<div></div>', 
     controller: function($scope) { 
      $scope.loadingData = true; 
      this.stopLoading = function() { 
       $scope.loadingData = false; 
      }; 
     } 
    } 
}); 

var result_set = { 
    //some data-transform-req 
}; 

beforeEach(module('myModule')); 

var element, scope, controller; 

    beforeEach(inject(function($rootScope, $compile) { 

     scope = $rootScope.$new(); 

     element = angular.element(
     '<my-container> <my-directive> </my-directive> </my-container>' 
    ); 

    $compile(element)(scope); 

    scope.$digest(); 

    controller = element.controller('myDirective'); 

    })); 

it('should call the transformData', function() { 
    controller.transformData(result_set); 
    scope.$apply(); 
    scope.transformData.should.have.been.called; 
}); 

})

Выпуск: Когда я запускаю тест, я получаю следующую ошибку

TypeError: 'undefined' is not an object (evaluating 'controller.transformData')

Что я делаю неправильно? Спасибо заранее за ваше время.

ответ

0

Ваш определить функцию transformData в объеме - НЕ в контроллере

controller: [ 
     '$scope', '$controller', 
     function ($scope, $controller) { 
      $controller('otherController', {$scope: $scope}) 
       .columns(
        $scope.x, 
        $scope.y, 
        $scope.series 
       ); 
      this.transformData = function(data) // <= change to this (controller) 
      { 
       /// does something; 
       return data; 
      }; 
     } 
    ], 
+0

Я попробовал некоторые исправления, которые не помогло :-( – Vasan

+0

Вероятно 'контроллер = element.controller («myDirective»); 'возвращает undefined – Michael