我遇到一个问题,当 ng-app与(AngularUI) ui-view 位于同一标签上时,我的测试都没有运行,我得到:
Error: Error while waiting for Protractor to sync with the page: {"message":"angular.element(...).injector(...) is undefined","stackTrace":[{"fileName":"http://localhost:3000/","lineNumber":71,"methodName":"anonymous/<"},{"fileName":"http://localhost:3000/","lineNumber":76,"methodName":"anonymous"},{"fileName":"http://localhost:3000/","lineNumber":68,"methodName":"handleEvaluateEvent"}]}
给我上述错误的Html:
<html><head></head><body>
<div ng-app="app" ui-view></div>
</body></html>
如果我将 ui-view指令移动到嵌套div ,我的测试工作正常:
<html><head></head><body>
<div ng-app="app">
<div ui-view></div>
</div>
</body></html>
我的应用程序适用于任一标记配置,只有测试与第一个测试有错误。
这种行为的解释是什么?
答案 0 :(得分:1)
问题是当在同一元素上声明ng-app和ui-view时,angular.element()。injector()是未定义的。但是,如果它们位于不同的元素上,则两个元素都存在注入器。
这是因为ui-router和angular之间的交互是因为ui-view指令使用了transclusion。使用与ng-app在同一元素上使用transclusion的指令导致它没有通过angular.element()。injector()的正确注入器。这是一个简单的例子:https://gist.github.com/juliemr/ffccf5bbe5b88a2d3da9
我认为这一切都按预期工作,解决方案是不要在同一元素上使用ng-app和ui-view。