angularjs - $compile 与 $componentController

标签 angularjs testing angularjs-directive

我对 Angular 比较陌生,并且已经开始使用组件架构编写我的应用程序。通过 Angular docs 查看时它建议使用 $componentController 模拟方法测试组件。

但是,当我查看传统上如何在 Angular 1.5 之前的版本中测试指令时,我发现首选方法似乎是使用 $compile 服务来实际构建指令模板和所有.通过使用 $compile,您可以对模板逻辑和 Controller 逻辑进行断言。而使用 $componentController 方法,您只能测试 Controller 逻辑,这实际上似乎并没有那么有用,因为大多数复杂性都存在于模板和服务中。

有人可以阐明现代最佳实践吗?对我来说,使用 $compile 更有意义,这样您也可以测试模板。但为什么 Angular 文档根本不提这个,而是推荐 $componentController

最佳答案

AngularJS 最大的问题之一是它有 $scope。这是您将绑定(bind)放置在 DOM 中使用的地方。它带来了很多困惑。

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

理想情况下,您应该尽可能多地在业务逻辑中进行测试,而在用户界面中进行较少的测试。由于框架处理业务逻辑和 UI 之间的同步,因此出现错误的可能性很小。但是业务逻辑是引入大多数错误的地方。这就是为什么在较新的 AngularJS 中,他们建议使用 $componentController 来测试 Controller 中的业务逻辑,而不是指令。

New Angular 没有$compile 并且大多数测试都是为 Controller 编写的, Controller 在那里作为类实现。

关于angularjs - $compile 与 $componentController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44164742/

相关文章:

java - 使用 JAXB 生成随机实例

.net - dotnet test 不会使用通配符递归搜索文件夹中的 .csproj

angularjs - 将 ui-grid 网格列格式化为货币 (RC 3.0)

javascript - AngularJS:创建一个能够使用 $scope 的自定义对象

javascript - 从 Unresolved promise 会导致内存泄漏吗?

javascript - 指令之间的连接(Angular 1.4.8)

javascript - 扩展 ng-if 或实现类似的指令

javascript - 表单验证与独立指令相结合正在删除范围值

javascript - 尝试测试 RxJS 间隔时未定义的值

http - 使用http promise的Angularjs自定义指令不与模板绑定(bind)