2016-11-28 60 views
0

我想测试一个角度指令。我以前做过这个没有任何问题,但今天我陷入了困境。肯定是一个愚蠢的错误。指令单元测试控制器返回空对象

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

最后我解决了它。当不使用注射

角检测。在我的情况是“$范围”。在我的控制器内部使用它之后,所有事情都开始正常运行

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

    if(self.nameValueList) 
    { 
     self.selectedOption = self.nameValueList[0].Value; 
    } 
}]) 
相关问题