Pregunta ¿Qué significa el subrayado en _servicename_ en las pruebas de AngularJS?


En el siguiente ejemplo de prueba, el nombre del proveedor original es APIEndpointProvider, pero para la inyección y el servicio de creación de instancias, la convención parece ser que debe ser inyectada con caracteres de subrayado que lo envuelvan. ¿Porqué es eso?

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

});

¿Cuál es la convención que me falta una mejor explicación?


74
2018-03-10 02:00


origen


Respuestas:


Los guiones bajos son un truco de conveniencia que podemos utilizar para inyectar un servicio con un nombre diferente para que podamos asignar localmente una variable local del mismo nombre que el servicio.

Es decir, si no pudiéramos hacer esto, tendríamos que usar algún otro nombre para un servicio localmente:

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

los $injector utilizado en las pruebas es capaz de simplemente eliminar los guiones bajos para darnos el módulo que queremos. No lo hace hacer cualquier cosa excepto reutilizar el mismo nombre.

Lea más en los documentos angulares


103
2018-03-10 02:06