动机
测试指令时;有时断言以不明显的方式失败,堆栈跟踪没有帮助,并且在使用 Chrome 开发人员工具在断点处暂停时检查局部变量会将森林隐藏在树后面。
这是我希望我能够暂停单元测试(可能使用iit
or ddescribe
)并在指令的 UI 周围查看以缩小错误行为的时候。
至今
我之前已经能够使用 KnockoutJS 实现这一点,并发现它在复杂场景中是一种非常有用的技术。现在我想对 AngularJS 做同样的事情。
- 我发现我可以将
$compile
使用 Angular 的元素附加到 html 正文,这使它可见,但是我无法与之交互,就好像所有绑定都已关闭一样。 - 经过仔细检查,我发现在运行测试用例(一个
it
块)时,一切似乎都井然有序,一旦测试用例完成,所有事件侦听器就会从相应的 DOM 元素中消失——click
比如<button ng-click="...">
. - 经过一番挖掘,我发现在angular-mocks.js:1965 的深处有一个
afterEach
块可以调用.off()
在两个地方关闭 DOM 事件侦听器:injector.get('$rootElement').off();
和handle && angular.element(handle.elem).off();
(通过angular.mock.clearDataCache();
)
- 当我注释掉这两
.off()
行时,瞧,附加的指令在 DOM 中变得栩栩如生!
注意:虽然我链接到 ( v1.2.10-build.2148+sha.fced1c0
) 的 angular-mocks 版本不是最先进的,但较新的版本似乎只是在涉及到这部分时移动的行号有所不同。
问题
是否有更好的(更多支持、更少临时性和/或更少hackish)方法来实现我想要做的事情?如果是这样,怎么做?
编辑:版本
- 业力 0.10.9
- 茉莉花 1.3.1
- Angular Mocks v1.2.10-build.2148+sha.fced1c0
- AngularJS 1.2.10-build.2148+sha.fced1c0