使用Karma对Angular Js控制器进行单元测试

时间:2015-10-15 22:15:03

标签: angularjs unit-testing karma-jasmine

我有一个指令,其中控制器被定义为指令定义的一部分。

 (function(){
     var app = angular.module('app', []); 
    app.directive('test', function(){ 
    return { 
    restrict: 'E', 
    templateUrl: 'test.html', 
    controller: ['$scope', function ($scope){...*set of functions*......}], 
    controllerAs:'reportCtrl',
    link:function(Attrs){
       }
     }; 
   }); 
})(); 

我需要为这组函数编写单元测试。我是业力测试的新手,我没有为这种代码找到太多资源。我几乎尝试了所有可能的方法。有人可以帮我写这个单元测试吗

1 个答案:

答案 0 :(得分:0)

这是一个例子。请参阅演示http://plnkr.co/edit/zK9MNkvNpHF2UY9BgMKz?p=preview

我所做的是编译指令并调用摘要周期。 在设置之后,它与常规控制器几乎相同。

describe('Auth Service Tests', function() {
  var element;
  var isolated;
  var $scope;
  beforeEach(module('MyApp'));
  beforeEach(inject(function($rootScope, $compile, $templateCache) {
    // Imports test.html
    var templateUrl = 'test.html';
    var req = new XMLHttpRequest();
    req.onload = function() {
      $templateCache.put(templateUrl, this.responseText);
    };
    req.open('get', templateUrl, false);
    req.send();


    $scope = $rootScope.$new();

    element = '<test></test>';
    // Creates the directive.
    element = $compile(element)($scope);

    // activates the $digest cycle.
    $scope.$apply();
  }));

  it('tests the transclude', function() {
    expect($scope.apple).toEqual('world');
    expect($scope.getApple()).toEqual('world');
  });

});