如何在指令[jasmine]中访问控制器 [英] how to access controller in directive [jasmine]
问题描述
我在访问指令上的方法和变量时遇到了一些困难,无法对其进行测试。我究竟做错了什么?我附上了我的指令和测试文件。我没有包括我的业力骗局,因为我知道这是正确的,这不是问题。
I am having some difficulty accessing the methods and variables on a directive in order to test it. What am I doing wrong? I have attached my directive and the test file. I did not include my karma conf because I know it is correct and that is not the problem.
accountsearch.spec.js< - 这是带测试的文件case
accountsearch.spec.js <-- this is the file with test cases
describe("Account search directive logic tests", function (){
var element,$scope,scope,controller,template
beforeEach(module("Common.accountSearch"))
beforeEach(inject( function (_$compile_, _$rootScope_,_$controller_,$templateCache) {
template = $templateCache.get("components/account-search/account-search.html")
$compile = _$compile_;
$rootScope = _$rootScope_;
$controller = _$controller_;
//scope = compiledElem.scope()
scope = $rootScope.$new();
element = $compile(template)(scope)
scope.$digest();
}));
it(" sets the account and calls back.", inject(function () {
//scope.$digest()
expect(element.setAccount).toBeFunction()
expect(element.hasClass("form-control")).toBeTruthy()
console.log(scope.$$prevSibling)
}));
//httpBackend.flush()
});
这是实际的指令,我已经尝试了很多方法来访问它的控制器,但我只是不喜欢知道我做错了什么。
this is the actual directive, I have tried so many ways to access its controller but I just don't know what I am doing wrong.
angular.module('Common.accountSearch',['ngRoute'])
.directive('accountSearch', [function() {
return {
controllerAs: 'ctrl',
controller: function ($scope, $element, $routeParams, $http) {
this.setAccount = function () {
var response = { AccountId : $scope.ctrl.searchedAccount.AccountId }
$scope.callback(response)
}
this.getAccounts = function(searchText){
return $http.get('/api/CRMAccounts', {
params: {
retrievalLimit: 10,
search: searchText
}
}).then(function(response){
return response.data;
});
}
},
scope : {
config : '=',
values : '=',
callback : '='
},
templateUrl : '/common/components/account-search/account-search.html',
restrict : 'EAC'
}
}]);
推荐答案
您需要获取指令的控制器,保存您要调用的方法。
You need to get the controller for the directive, which holds the methods you are trying to call.
您的元素
变量只保存DOM组件。
Your element
variable only holds the DOM-component.
beforeEach(inject( function (_$compile_, _$rootScope_,_$controller_,$templateCache) {
template = $templateCache.get("components/account-search/account-search.html")
$compile = _$compile_;
$rootScope = _$rootScope_;
$controller = _$controller_;
scope = $rootScope.$new();
element = $compile(template)(scope)
scope.$digest();
ctrl = element.controller('accountSearch');
}));
在你的测试中:
expect(ctrl.setAccount).toBeFunction()
这篇关于如何在指令[jasmine]中访问控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!