2013-03-10 12 views
74

Nel seguente esempio di prova, il nome del provider originale è APIEndpointProvider, ma per l'iniezione e l'istanziazione del servizio la convenzione sembra essere stata iniettata con caratteri di sottolineatura che lo avvolgono. Perché?Cosa significano i caratteri di sottolineatura in _servicename_ nei test 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); 
    }); 

}); 

Qual è la convenzione mi manca una spiegazione migliore?

risposta

102

I caratteri di sottolineatura sono un trucco pratico che è possibile utilizzare per iniettare un servizio con un nome diverso in modo da poter assegnare localmente una variabile locale con lo stesso nome del servizio.

Cioè, se non abbiamo potuto fare questo, avremmo dovuto usare un altro nome per un servizio a livello locale:

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

Il $injector utilizzato in fase di test è in grado di rimuovere solo le sottolineature per dare noi il modulo che vogliamo. Non lo fa do tranne che riusciamo a riutilizzare lo stesso nome.

Read more in the Angular docs

Problemi correlati