似乎我无法在使用transclude的指令的单元测试中触发事件,即使该指令在实际应用程序中正常工作。例如,这是一个简单的指令和单元测试,它将提醒文本:
http://plnkr.co/edit/yPLVJp?p=preview(这会正确提醒)
现在这里是完全相同的代码,除了这个指令有一个模板并使用transclude:
http://plnkr.co/edit/wAqY2h?p=preview(无论出于何种原因,这都没有正确提醒)
有没有理由第二个,即使用transclude的指令,没有像第一个那样在单元测试中正确触发警报?
答案 0 :(得分:1)
使用transclude的指令不会触发警报的原因是因为它有一个独立的范围:
scope: {}
并且您在其中定义了回调:
post: function(scope, element, attributes) {
scope.func = function($event) {
alert('the unit test should trigger this');
}
}
由于转换,指令和转换不共享相同的范围,而是从同一父级继承(参见doc,即使很难理解)。 如果您希望transclude元素访问由指令添加到作用域的元素,则该指令不能创建新作用域并在父作用域中添加此函数:
scope: false,
...
post: function(scope, element, attributes) {
scope.func = function($event) {
alert('the unit test should trigger this');
}
}
然后,directive和transclude元素可以共享相同的范围。