Was bedeuten die Unterstriche in _servicename_ in AngularJS-Tests?

76

Im folgenden Beispieltest lautet der ursprüngliche Anbietername APIEndpointProvider, aber für die Injektion und Service-Instanziierung scheint die Konvention zu sein, dass er mit Unterstrichen versehen werden muss. Warum ist das so?

'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);
  });

});

Was ist die Konvention, für die mir eine bessere Erklärung fehlt?

Kenneth Lynne
quelle

Antworten:

108

Die Unterstriche sind ein praktischer Trick, mit dem wir einen Dienst unter einem anderen Namen einfügen können, damit wir lokal eine lokale Variable mit demselben Namen wie der Dienst zuweisen können.

Das heißt, wenn wir dies nicht tun könnten, müssten wir einen anderen Namen für einen Dienst vor Ort verwenden:

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
});

Der $injectorbeim Testen verwendete kann nur die Unterstriche entfernen, um uns das gewünschte Modul zu geben. Es ist nicht tut nichts außer lassen Sie uns die gleichen Namen wieder verwenden.

Lesen Sie mehr in den Angular-Dokumenten

Josh David Miller
quelle