在下面的示例测试中,原始提供程序名称为APIEndpointProvider,但是对于注入(inject)和服务实例化,惯例似乎是必须使用下划线将其包装。这是为什么?
'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);
});
});
我缺少更好的解释的约定是什么?
最佳答案
下划线是一种方便的技巧,我们可以使用它来以其他名称注入(inject)服务,以便我们可以在本地分配与该服务同名的局部变量。
也就是说,如果我们无法做到这一点,那么我们将不得不在本地为服务使用其他名称:
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