0

我需要測試一些指令並獲取其中一個局部變量來檢查其值。該指令本身看起來這樣:訪問本地變量,同時在AngularJS中進行指令單元測試

angular.module('app').directive('favoritesList', function() { 
    return { 
    restrict: 'E', 
    replace: true, 
    templateUrl: 'templates/directives/favoritesListDirective.html', 
    controller: function ($scope, $rootScope, $rootElement, $filter, ContactService, ContactFollowerService, Restangular) { 

     var listLimit = 100, // in order to prevent favoritesList *overflow* 
      followedFilter = {filters: {followed: true}, page_size:listLimit}; 

     // get Favorites List 
     ContactService.provider.getList(followedFilter) // 
     .then(function(result){ 
      $scope.favorites=result; 
     }, function(message){ 
      console.warn('Cannot get a Favorites List',message); 
     }); 

     .... 


    } 
    }; 
}); 

所以,我怎樣才能訪問followedFilter變量在描述/它塊?

+0

不能的方式,這是寫的。請參閱下面的答案 – Katana24

回答

0

我建議打破你的控制器,所以你可以正確抓住它。雖然有可能將控制器從指令中解放出來,但這可能非常困難 - 最簡單的做法是讓控制器單機運行。例如:

(function() { 
    'use strict'; 

    describe('FavouritesListCtrl', function() { 

    var $rootScope, $scope, ctrl; 
    beforeEach(module('app')); 

    beforeEach(inject(function(_$rootScope_, $controller) { 
     $rootScope = _$rootScope_; 
     $scope  = $rootScope.$new(); 

     ctrl = $controller('FavouritesListCtrl',{$scope: $scope}); 
    })); 

    describe('FavouritesListCtrl', function() { 
     it('should be defined', function() { 
      expect(ctrl).toBeDefined(); 
     }); 
    }); 

    }); 
}); 

在此基礎上測試你所期望的控制器去定義,像這樣:

(function() { 
    'use strict'; 

    angular 
    .module('app') 
    .component('favoritesList', { 
     bindings: {}, 
     controllerAs: "vm", 
     controller: "FavouritesListCtrl", 
     templateUrl: 'example.html' 
    }); 
}()); 

在這裏,我利用組件,而不是指令,但他們很密切相關。如果你想在初始化測試followedFilter,例如:

describe('init', function() { 
    it('followedFilter should be set to ', function() { 
    expect(ctrl.followedFilter).toBeDefined(); 
    }); 
}); 

這會期待followedFilter像這樣在控制器中定義:

function FavouritesListCtrl() { 
    var vm = this; 
    vm.followedFilter = { 
    //values 
    }; 
}