web-dev-qa-db-fra.com

Que signifient les traits de soulignement dans _servicename_ dans les tests AngularJS?

Dans l'exemple de test suivant, le nom du fournisseur d'origine est APIEndpointProvider, mais pour l'injection et l'instanciation de service, la convention semble être qu'il doit être injecté avec des traits de soulignement qui l'encapsulent. Pourquoi donc?

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

});

À quelle convention manque-t-il une meilleure explication?

76
Kenneth Lynne

Les traits de soulignement sont une astuce de commodité que nous pouvons utiliser pour injecter un service sous un nom différent afin que nous puissions attribuer localement une variable locale du même nom que le service.

Autrement dit, si nous ne pouvions pas le faire, nous devrions utiliser un autre nom pour un service localement:

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

Le $injector utilisé dans les tests est capable de supprimer simplement les traits de soulignement pour nous donner le module que nous voulons. Il ne fait rien sauf réutiliser le même nom.

En savoir plus dans les documents Angular docs

108
Josh David Miller