2013-03-10 5 views
74

В следующем примере теста исходным именем поставщика является APIEndpointProvider, но для инсталляции инсталляции и обслуживания соглашение, похоже, должно быть введено с подчеркиваниями, обертывающими его. Почему это?Что означают подчеркивания в _servicename_ в тестах 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); 
    }); 

}); 

Какая конвенция Мне не хватает лучшего объяснения?

ответ

102

Подчеркивания - это удобный трюк, который мы можем использовать для ввода услуги под другим именем, чтобы мы могли локально назначать локальную переменную с тем же именем, что и служба.

То есть, если мы не можем сделать это, мы должны были бы использовать другое имя для службы на местном уровне:

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 используется при тестировании в состоянии просто удалить подчеркивание, чтобы дать нам нужен модуль. Это не do ничего, кроме повторного использования с тем же именем.

Read more in the Angular docs