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'
]