Жасмин - модульное тестирование директивы: получение undefined не является объектом

0

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

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

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;
                    };
            }
        ],

Моя спецификация

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" не является объектом (оценка "controller.transformData")

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

Теги:
unit-testing
karma-jasmine
jasmine

1 ответ

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
    Я пытался исправить выше, это не помогло :-(
  • 0
    Возможно, controller = element.controller('myDirective'); возвращает неопределенное

Ещё вопросы

Сообщество Overcoder
Наверх
Меню