$ compile vs $ componentController

时间:2017-05-24 17:10:14

标签: angularjs testing angularjs-directive

我对Angular相对较新,并开始使用组件架构编写我的应用程序。查看Angular docs时,建议使用$componentController模拟方法测试组件。

然而,当我看看传统上如何在Angular pre-1.5中测试指令时,看起来首选的方法是使用$compile服务来实际构建指令模板 - 全部。通过使用$compile,您可以对模板逻辑以及控制器逻辑进行断言。使用$componentController方法,您只能测试控制器逻辑,因为模板和服务中存在大多数复杂性,因此实际上看起来并非有用。

有人能否了解现代最佳做法?对我而言,使用$compile更有意义,这样您也可以测试模板。但是为什么Angular文档根本没有提到这一点,而是推荐$componentController

1 个答案:

答案 0 :(得分:4)

AngularJS最大的问题之一是它有$scope。这是您将绑定放在DOM中使用的位置。它引入了很多混乱。

每个优秀的应用程序设计都应该有层次:业务逻辑,UI等。在AngularJS中,这些层几乎与业务逻辑的controller和UI的directives相对应。但是,由于$scopedirectives可用,许多人决定不使用控制器并将所有业务逻辑放在指令中。这导致了难以测试的指令,因为它们同时实现了两个层。由于DOM操作缓慢,测试也变得缓慢。

理想情况下,您应该尽可能多地将测试放入业务逻辑中,而不要放在UI中。由于框架处理业务逻辑和UI之间的同步,因此很可能存在错误。但业务逻辑是引入大多数错误的地方。这就是为什么在较新的AngularJS中,他们建议使用$componentController来测试控制器中的业务逻辑,而不是指令。

New Angular没有$compile,并且大多数测试是为控制器编写的,控制器是作为类实现的。