2017-05-29 64 views
1

我试图用karma和jasmine测试指令。我使用的是角1.4,我在这里搜索了不同的东西,并通过互联网,但我无法使它工作。用jasmine和bindToController绑定angular指令属性到控制器true

var angular = require('angular'); 

module.exports = angular.module('myApp.ui.apps.servicesObject.list', []) 

.directive('servicesObjectList', function(){ 
    return { 
     restrict: 'E', 
     replace: true, 
     scope: true, 
     bindToController: { 
      services: '=', 
      selectedServices: '=' 
     }, 
     templateUrl: 'app/ui/apps/services/directives/services.html', 
     controllerAs: 'servicesListCtrl', 
     controller: 'ServicesListController' 
    } 
}) 

.controller('ServicesListController', require('./servicesListController')); 

这就是我要如何测试它。

describe('Service app test, listDirective' , function(){ 
    var element, scope, controller; 

    beforeEach(function(){ 
     angular.mock.module('templates'); 
     angular.mock.module('myApp.ui.apps.servicesObject.list', function($provide) { 
      $provide.value('gettextCatalog', { getString: function(){}}); 
      $provide.value('translateFilter', function(){}); 
     }); 
    }); 

    beforeEach(inject(function($rootScope, $compile, $controller){ 
     scope = $rootScope; 
     scope.services= _servicesMock_; 
     element = '<services-object-list selected-services="[]" services="services"></services-object-list>'; 

     $compile(element)(scope); 
     scope.$digest(); 

     controller = $controller('ServicesListController', {$scope: scope}); 
     console.log(controller.getServices());    
    })); 

    it ("First test", function(){ 
     expect(true).toBe(true); 
    }); 
}); 

,我的问题是该服务不是在我的控制器只有在范围内结合。我做错了什么?如果我做控制台(controller.getServices())。它返回我未定义的,而不是我作为属性传递的服务。我的生产代码按预期工作,但没有测试。

非常感谢!

回答

1

几个小时后,我发现在角度1.3中添加了一个新功能,以便使unitTesting中的绑定更容易。这里是讨论的主题https://github.com/angular/angular.js/issues/9425

基本上第三个参数被添加到控制器构造函数服务中,您可以传递绑定到控制器的数据。

所以unitTest配置就是这样。

describe('Service app test, listDirective' , function(){ 
    var element, scope, controller; 

    beforeEach(function(){ 
     angular.mock.module('templates'); 
     angular.mock.module('myApp.ui.apps.servicesObject.list', function($provide) { 
      $provide.value('gettextCatalog', { getString: function(){}}); 
      $provide.value('translateFilter', function(){}); 
     }); 
    }); 

    beforeEach(inject(function($rootScope, $compile, $controller){ 
     var data = { 
      services: _servicesMock_ 
     }; 
     scope = $rootScope; 
     scope.services= _servicesMock_; 
     element = '<services-object-list selected-services="[]" services="services"></services-object-list>'; 

     $compile(element)(scope); 
     scope.$digest(); 

     controller = $controller('ServicesListController', {$scope: scope}, data); 
     console.log(controller.getServices());    
    })); 

    it ("First test", function(){ 
     expect(true).toBe(true); 
    }); 
}); 
相关问题