在我JSFiddle我有这个指令。
(function() {
angular.module('myApp', [])
.directive('appFoo', appFoo);
function appFoo() {
console.log('Directive Factory runs');
return {
controller: AppFooController,
link: link,
replace: true,
restrict: 'E',
scope: {
parentProp: '='
}
};
function AppFooController($scope) {
console.log('Controller runs');
$scope.render({
some: 'data'
});
}
function link($scope, $element) {
console.log('Link function runs');
$scope.render = function(data) {
console.log(shared.$scope.parentProp, $element[0], data);
};
}
}
}());
这个Jasmine Spec;
describe('myApp::appFoo', function() {
var shared;
beforeEach(function() {
shared = {};
shared.markup = '<app-foo parent-prop="someProp"></app-foo>';
inject(function($compile, $rootScope) {
shared.$compile = $compile;
shared.$parentScope = $rootScope.$new(true);
shared.$rootScope = $rootScope;
});
shared.createDirective = function() {
shared.$element = angular.element(shared.markup);
shared.$compile(shared.$element)(shared.$parentScope);
shared.$parentScope.$digest();
shared.el = shared.$element[0];
shared.$childScope = shared.$element.scope();
};
});
describe('when compiled', function() {
describe('when all parameters are provided', function() {
beforeEach(function() {
shared.$parentScope.someProp = {
a: 'a',
b: 'b'
};
shared.createDirective();
});
it('should have a render method', function() {
expect(typeof shared.$childScope.render).toEqual('function');
});
});
});
});
链接功能的工作是向范围添加渲染方法。它适用于应用程序,但在Jasmine测试中它永远不会运行。
我已经查看了下面列出的各种其他问题,但没有运气。
任何帮助表示感谢。
[1]
答案 0 :(得分:0)
正如@ aliasm2k所指出的,这里的问题是在链接函数之前调用控制器。
因为控制器在链接函数创建它之前调用$ scope.render,所以放弃了调用堆栈并且没有运行链接函数。