我不明白为什么我的指令的链接功能永远不会在Jasmine测试中被调用。我做了一个简单的例子。
这是我的指令(TestDirective.js):
'use strict';
angular.module('comp-one').directive('test',function(){
return{
restrict:'E',
templateUrl:'components/comp-one/html/TestTemplate.html',
scope:true,
link:function(scope){
scope.test='xxx';
}
};
});

这是测试用例:
'use strict';
describe('testDirective',function(){
var $compile, $rootScope, element;
beforeEach(module('comp-one'));
beforeEach(module('templates'));
beforeEach(inject(function(_$rootScope_,_$compile_){
$compile = _$compile_;
$rootScope = _$rootScope_;
}));
it('xxx', function(){
var html = '<test></test>';
element = $compile(html)($rootScope);
$rootScope.$digest();
expect( $rootScope.test ).toBe('xxx');
});
});
&#13;
测试失败,因为链接函数永远不会被调用,因此xxx变量未定义。我期望链接功能被&#34; $ compile(html)($ rootScope);&#34;声明。 当我在链接函数中设置断点并在浏览器中运行应用程序(而不是测试)时,会调用链接函数。
我正在使用Karma运行测试,我也可以在控制台输出中找到该文件:
Processing "D:/JWS/test/workspace/bla/app/components/comp-one/scripts/TestDirective.js".
修改
好, 我发现当我将范围设置为false时,测试运行成功。但有没有办法用隔离的范围测试链接功能?
答案 0 :(得分:2)
调用链接功能。您将在元素的范围内找到值,而不是$rootScope
。
在期望部分使用element.isolateScope().test
代替$rootScope.test
。