link AngularJS 指令的函数从未在 Jasmine 测试中调用
link function of AngularJS directive never called in Jasmine test
我不明白为什么我的指令的 link 函数从未在 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');
});
});
测试失败,因为 link 函数从未被调用,所以 xxx 变量未定义。我预计 link 函数由“$compile(html)($rootScope);”执行陈述。
当我在浏览器中的 link 函数和 运行 应用程序(不是测试)中设置断点时,会调用 link 函数。
我正在 运行使用 Karma 进行测试,它也找到了我在控制台输出中看到的文件:
Processing "D:/JWS/test/workspace/bla/app/components/comp-one/scripts/TestDirective.js".
编辑:
好的,
当我将范围设置为 false 时,我发现测试 运行s 成功了。但是有没有办法用隔离范围测试 link 函数?
调用了link函数。您将在元素的范围内找到值,而不是在 $rootScope
.
上
在预期部分使用 element.isolateScope().test
而不是 $rootScope.test
。
我不明白为什么我的指令的 link 函数从未在 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');
});
});
测试失败,因为 link 函数从未被调用,所以 xxx 变量未定义。我预计 link 函数由“$compile(html)($rootScope);”执行陈述。 当我在浏览器中的 link 函数和 运行 应用程序(不是测试)中设置断点时,会调用 link 函数。
我正在 运行使用 Karma 进行测试,它也找到了我在控制台输出中看到的文件:
Processing "D:/JWS/test/workspace/bla/app/components/comp-one/scripts/TestDirective.js".
编辑:
好的, 当我将范围设置为 false 时,我发现测试 运行s 成功了。但是有没有办法用隔离范围测试 link 函数?
调用了link函数。您将在元素的范围内找到值,而不是在 $rootScope
.
在预期部分使用 element.isolateScope().test
而不是 $rootScope.test
。