_servicename_ 中的下划线在 AngularJS 测试中是啥意思?

Posted

技术标签:

【中文标题】_servicename_ 中的下划线在 AngularJS 测试中是啥意思?【英文标题】:What does the underscores in _servicename_ mean in AngularJS tests?_servicename_ 中的下划线在 AngularJS 测试中是什么意思? 【发布时间】:2013-02-25 10:04:57 【问题描述】:

在下面的示例测试中,原始提供程序名称是 APIEndpointProvider,但对于注入和服务实例化,约定似乎是注入时必须用下划线包裹它。这是为什么呢?

'use strict';

describe('Provider: APIEndpointProvider', function () 

  beforeEach(module('myApp.providers'));

  var APIEndpointProvider;
  beforeEach(inject(function(_APIEndpointProvider_) 
    APIEndpointProvider = _APIEndpointProvider_;
  ));

  it('should do something', function () 
    expect(!!APIEndpointProvider).toBe(true);
  );

);

我缺少更好的解释的约定是什么?

【问题讨论】:

【参考方案1】:

下划线是一种方便的技巧,我们可以使用它来以不同的名称注入服务,以便我们可以在本地分配与服务同名的局部变量。

也就是说,如果我们不能这样做,我们就必须在本地为服务使用其他名称:

beforeEach(inject(function(APIEndpointProvider) 
  AEP = APIEndpointProvider; // <-- we can't use the same name!
));

it('should do something', function () 
  expect(!!AEP).toBe(true);  // <-- this is more confusing
);

在测试中使用的$injector 可以去掉下划线来给我们想要的模块。它没有任何事情,只是让我们重复使用相同的名称。

Read more in the Angular docs

【讨论】:

以上是关于_servicename_ 中的下划线在 AngularJS 测试中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Python 中的函数的双下划线“__”

Python 中的特殊双下划线方法

python中的下划线

python类中的双下划线方法

$this->_objectProperty 中的下划线是啥意思? [复制]

在 OCaml 中的 let 命令(即 let _ = ... in)中使用下划线通配符有啥副作用吗?