Angularjs 角度单元测试-为什么下划线有助于保持代码整洁?有必要吗?

Angularjs 角度单元测试-为什么下划线有助于保持代码整洁?有必要吗?,angularjs,unit-testing,Angularjs,Unit Testing,从文档中: 下划线表示法:使用下划线表示法(例如: _$rootScope)是AngularJS社区中广泛使用的一种约定,用于在测试中保持变量名干净。这就是为什么美元注入器 匹配时去掉前导下划线和尾随下划线 参数。下划线规则仅在名称开始和结束时适用 以一个下划线结束,否则不会发生替换 如果有人漏掉下划线,会发生什么不好的事情吗?有人能解释一下这是怎么变干净的吗?只是为了更好地理解,当我在复习一个不使用下划线的通过测试时,我无法向自己解释为什么会出现这种情况,如果忽略了,是否会发生意外 来自测试的

从文档中:

下划线表示法:使用下划线表示法(例如: _$rootScope)是AngularJS社区中广泛使用的一种约定,用于在测试中保持变量名干净。这就是为什么美元注入器 匹配时去掉前导下划线和尾随下划线 参数。下划线规则仅在名称开始和结束时适用 以一个下划线结束,否则不会发生替换

如果有人漏掉下划线,会发生什么不好的事情吗?有人能解释一下这是怎么变干净的吗?只是为了更好地理解,当我在复习一个不使用下划线的通过测试时,我无法向自己解释为什么会出现这种情况,如果忽略了,是否会发生意外

来自测试的代码片段

 var testScope, rootScope;
 var state,log;

  beforeEach(module('test'));

 beforeEach(inject(function($rootScope, $controller, MonitoringService) {
  testScope = $rootScope.$new();
  rootScope = $rootScope;
  state = $state;
  log = $log;


 testController = $controller('TestController', {
   $rootScope: rootScope,
   $state: state,
   MonitoringService: MonitoringService,
  });

所以在这个测试中(没有复制全部内容),测试通过并注入监控服务

不使用下划线表示法是可以的。它的存在使得您可以使用与正在注入的内容相同的名称来命名测试变量(主要用于Angular框架中包含的内容)。例如使用
$q

var $q;

beforeEach(inject(function($rootScope, $controller, MonitoringService, _$q_) {
  testScope = $rootScope.$new();
  rootScope = $rootScope;
  state = $state;
  log = $log;
  $q = _$q_;
如果在测试类中将
$q
命名为类似
q
的名称,则阅读起来会更困难。使用下划线表示法可以保持测试干净,因为开发人员不必在角度测试名和本地测试名之间来回映射


但是,如果您想要不同的名称,则不存在冲突,您可以安全地忽略下划线符号。

不使用下划线符号是可以的。它的存在使得您可以使用与正在注入的内容相同的名称来命名测试变量(主要用于Angular框架中包含的内容)。例如使用
$q

var $q;

beforeEach(inject(function($rootScope, $controller, MonitoringService, _$q_) {
  testScope = $rootScope.$new();
  rootScope = $rootScope;
  state = $state;
  log = $log;
  $q = _$q_;
如果在测试类中将
$q
命名为类似
q
的名称,则阅读起来会更困难。使用下划线表示法可以保持测试干净,因为开发人员不必在角度测试名和本地测试名之间来回映射


但是,如果您想要不同的名称,那么就不会有冲突,您可以安全地忽略下划线符号。

因此,为了确定我的理解……混淆之处在于,如果您的var是名称$q,而您的var是注入$q,这正是下划线试图阻止的?没错。事实上,如果你尝试不使用承诺,你会将函数参数赋值给它自己。所以我要确定的是,我理解…混淆的是,如果你的var是名称$q,而你的注入$q,那就是下划线试图阻止的?没错。事实上,如果您尝试不使用函数,您将为函数参数本身赋值。