2016-11-28 6 views
0

Я пытаюсь проверить угловую директиву. Я сделал это раньше без каких-либо проблем, но сегодня я застрял. Наверняка это глупая ошибка.Директива unitTest controller возвращает пустой объект

var element, scope, controller; 


beforeEach(function() { 
    angular.mock.module('templates'); 
    angular.mock.module('myApp.ui.apps.myMod'); 
    angular.mock.module('myApp.ui.apps.myMod.dropdown-parameter'); 

    angular.mock.inject(function($compile, $rootScope, $templateCache, $controller){ 
     scope = $rootScope; 
     element = angular.element('<dropdown-parameter name-value-list="nameValueList" selected-option="selectedOption"></dropdown-parameter>'); 
     scope.nameValueList = []; 
     var firstEnumValue = { 
         "Name":"TestMock", 
         "Value":"TestMock1Value" 
        }; 
     var secondEnumValue = { 
          "Name":"TestMock", 
          "Value": "TestMock2Value"  
        }; 

     scope.nameValueList.push(firstEnumValue); 
     scope.nameValueList.push(secondEnumValue); 
     scope.selectedOption={}; 
     $compile(element)(scope); 
     scope.$digest(); 
     controller = $controller('dropdownParameterController' ,{$scope: scope}); 
     }); 
}); 

fit('Given an instantiated controller for dropdown parameter component when html is rendered then default value is the first one in the nameValueList', function(){ 
    console.log(controller); // HERE RETURNS {} 
    expect(controller.selectedOption).toBe(controller.nameValueList[0].Value); 
}); 

Проблема заключается в том, что контроллер всегда равен пустой объект

console.log (контроллер) =====> {} Что я делаю неправильно?

Это мой контроллер & & директивный код.

var angular = require('angular'); 

module.exports = angular.module('myApp.ui.apps.myMod.dropdown-parameter', []) 

.controller('dropdownParameterController', ['$scope', function($scope){ 
var self = this; 
if(self.nameValueList) 
{ 
    self.selectedOption = self.nameValueList[0].Value; 
} 
}]) 
.directive('dropdownParameter', function(){ 
return { 
    restrict: 'E', 
    scope: true, 
    bindToController: { 
     nameValueList:'=', 
     selectedOption:'=' 
    }, 
    templateUrl: 'app/ui/apps/diagnostics/dropdown-parameter/dropdown-parameter.html', 
    controllerAs: 'dropdownParameterCtrl', 
    controller: 'dropdownParameterController' 
}; 
}); 

ответ

0

Наконец-то я решил.

Угловой обнаруживает, когда инъекция не используется. В моем случае это «$ scope». После его использования внутри моего контроллера все начало работать правильно.

.controller('dropdownParameterController', ['$scope', function($scope){ 
    var self = this; 
    self.scope = $scope; 

    if(self.nameValueList) 
    { 
     self.selectedOption = self.nameValueList[0].Value; 
    } 
}]) 
Смежные вопросы