角度单元测试指令,使用转换不按预期工作

时间:2013-06-28 19:58:11

标签: angularjs angularjs-directive

似乎我无法在使用transclude的指令的单元测试中触发事件,即使该指令在实际应用程序中正常工作。例如,这是一个简单的指令和单元测试,它将提醒文本:

http://plnkr.co/edit/yPLVJp?p=preview(这会正确提醒)

现在这里是完全相同的代码,除了这个指令有一个模板并使用transclude:

http://plnkr.co/edit/wAqY2h?p=preview(无论出于何种原因,这都没有正确提醒)

有没有理由第二个,即使用transclude的指令,没有像第一个那样在单元测试中正确触发警报?

1 个答案:

答案 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元素可以共享相同的范围。