2013-03-10 11 views
74

W poniższym przykładzie test, oryginalna nazwa dostawcy jest APIEndpointProvider, ale dla iniekcji i tworzenia usługi konwencja wydaje się być, że musi zostać wstrzyknięta z zawijaniem go przez podkreślenia. Dlaczego?Co oznacza podkreślenie w _servicename_ w testach AngularJS?

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

}); 

Na jakiej podstawie brakuje mi lepszego wyjaśnienia?

Odpowiedz

102

Podkreślenia to sztuczka z wygodą, której możemy użyć do wstrzyknięcia usługi pod inną nazwą, abyśmy mogli lokalnie przypisać zmienną lokalną o tej samej nazwie co usługa.

Oznacza to, że jeśli nie możemy tego zrobić, byśmy musieli użyć innej nazwy dla usługi lokalnie:

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 wykorzystywane w badaniach jest w stanie po prostu usunąć podkreślenia dać nam moduł, który chcemy. Nie oznacza to, że możemy użyć tego samego imienia.

Read more in the Angular docs