Angularjs 测试中未链接的角度指令
为了熟悉指令测试,我创建了如下所示的简单示例。不幸的是,测试失败了,似乎从未调用链接函数。该指令在应用程序中使用时确实有效 我尝试过硬编码Angularjs 测试中未链接的角度指令,angularjs,angularjs-directive,Angularjs,Angularjs Directive,为了熟悉指令测试,我创建了如下所示的简单示例。不幸的是,测试失败了,似乎从未调用链接函数。该指令在应用程序中使用时确实有效 我尝试过硬编码message属性,删除link函数中的条件,甚至从$watch中提取attr集,但测试仍然失败 还有其他类似的帖子,其原因是由于缺少$digest调用,但我确实有这样的帖子,并且我尝试将其移动到itspec块中 如果我运行console.log(elem[0].otherHTML)调用,那么范围绑定似乎可以工作 <wd-alert type="noti
message
属性,删除link函数中的条件,甚至从$watch中提取attr集,但测试仍然失败
还有其他类似的帖子,其原因是由于缺少$digest调用,但我确实有这样的帖子,并且我尝试将其移动到it
spec块中
如果我运行console.log(elem[0].otherHTML)
调用,那么范围绑定似乎可以工作
<wd-alert type="notice" message="O'Doole Rulz" class="ng-scope"></wd-alert>
我错过了什么
alert.spec.js
“严格使用”;
描述('警报规格',功能(){
var范围,elem;
在每个模块之前(模块(‘myapp’);
beforeach(注入函数($compile,$rootScope){
scope=$rootScope;
scope.msg=“O'Doole Rulz”;
elem=角元素(“”);
$compile(elem)(范围);
范围。$digest();
}));
它('显示消息',函数(){
expect(elem.text()).toContain(“O'Doole Rulz”);
});
});
alert.js
angular.module('myapp')。指令('wdAlert',函数(){
返回{
限制:“EA”,
替换:正确,
模板:“”,
链接:函数(范围、元素、属性){
属性$observe('消息',函数()){
如果(属性消息){
元素文本(属性消息);
元素addClass(属性类型);
}
})
}
}
});
原来问题在于我组织文件的方式的因果报应配置。我会把这个问题留着,以防它咬到别人的屁股
files: [
...,
'spec_path/directives/*js' // what I originally had
'spec_path/directives/**/*.js' // what I needed
]
我加上这个是为了向其他想知道的人详细说明答案 我通过bower安装了第三方指令。它在应用程序中起作用,但导致测试中断 问题是Grunt/Karma无法读取index.html中的脚本。相反,您需要确保让karma知道每个已安装的脚本 例如,我使用了指令ngQuickDate(日期选择器)。我将其添加到应用程序的index.html中,但我还需要将其添加到karma.conf.js中:
files: [
...
'app/bower_components/ngQuickDate/dist/ng-quick-date.js'
]
上面的答案通过使用**
通配符来表示“递归地在所有子目录中”,实现了相同的功能
希望有帮助 您是否尝试了
scope=$rootScope.$new()
,而不是scope=$rootScope
?后者是我记得在文档中看到的模式。对于指令,它应该只是$rootScope。我刚刚发现了问题,这是一个karma include问题->使用*.js
而不是***.js
。对我不好。
files: [
...,
'spec_path/directives/*js' // what I originally had
'spec_path/directives/**/*.js' // what I needed
]
files: [
...
'app/bower_components/ngQuickDate/dist/ng-quick-date.js'
]