Что означают подчеркивания в значении _servicename_ в тестах AngularJS?

В следующем примере теста исходное имя поставщика - 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, используемый при тестировании, может просто удалить символы подчеркивания, чтобы предоставить нам необходимый нам модуль. Это не делает ничего, кроме как повторно использовать одно и то же имя.

Подробнее в документах Angular