加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在角度的单元测试指令控制器,而不使控制器全局

发布时间:2020-12-17 09:06:34 所属栏目:安全 来源:网络整理
导读:在Vojta Jina的卓越的存储库中,他演示了指令测试,他在模块包装器之外定义了指令控制器。看这里: https://github.com/vojtajina/ng-directive-testing/blob/master/js/tabs.js 这不是坏的做法和污染全球命名空间吗? 如果一个人有另一个地方,它可能是合乎
在Vojta Jina的卓越的存储库中,他演示了指令测试,他在模块包装器之外定义了指令控制器。看这里:
https://github.com/vojtajina/ng-directive-testing/blob/master/js/tabs.js

这不是坏的做法和污染全球命名空间吗?

如果一个人有另一个地方,它可能是合乎逻辑的调用的东西TabsController,不会打破东西吗?

所提到的指令的测试在这里:https://github.com/vojtajina/ng-directive-testing/commit/test-controller

是否可以测试指令控制器与指令的其余部分分离,而不将控制器放置在全局命名空间中?

这将是很好的封装整个指令在app.directive(…)定义。

优秀的问题!

因此,这是一个常见的问题,不仅是控制器,而且还可能包含指令可能需要执行其任务但不一定要将此控制器/服务暴露给“外部世界”的服务。

我坚信全球数据是邪恶的,应该避免,这也适用于指挥控制器。如果我们采用这个假设,我们可以采用几种不同的方法来在本地定义这些控制器。在这样做时,我们需要记住,控制器应该仍然“容易”访问单元测试,所以我们不能简单地隐藏它到指令的关闭。 IMO的可能性是:

1)首先,我们可以在模块级简单定义指令的控制器,例如:

angular.module('ui.bootstrap.tabs',[])
  .controller('TabsController',['$scope','$element',function($scope,$element) {
    ...
  }])
 .directive('tabs',function() {
  return {
    restrict: 'EA',transclude: true,scope: {},controller: 'TabsController',templateUrl: 'template/tabs/tabs.html',replace: true
  };
})

这是一个简单的技术,我们在https://github.com/angular-ui/bootstrap/blob/master/src/tabs/tabs.js使用,这是基于Vojta的工作。

虽然这是一个非常简单的技术,但应该注意,控制器仍然暴露于整个应用程序,这意味着其他模块可能会覆盖它。在这个意义上,它使控制器本地AngularJS应用程序(所以不污染全局窗口范围),但它也是全局的所有AngularJS模块。

2)使用闭包范围和特殊文件设置进行测试。

如果我们想完全隐藏一个控制器函数,我们可以在一个闭包中包装代码。这是AngularJS使用的一种技术。例如,查看NgModelController,我们可以看到它被定义为一个“全局”函数在它自己的文件(因此很容易访问测试),但整个文件包装在闭包中的构建时间:

> https://github.com/angular/angular.js/blob/master/src/angular.prefix
> https://github.com/angular/angular.js/blob/master/src/angular.suffix

总而言之:选项(2)是“更安全”,但需要一些前期设置的构建。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读