2016-02-25 3 views
0

Вот пример:Как правильно ссылаться на службу в angularjs модульного тестирования жасмин

beforeEach(angular.mock.module('my-app')); 

beforeEach(angular.mock.inject(function (_$rootScope_, _$compile_, _sessionParams_, _$httpBackend_, _pclnABTesting_){...})); 

внутри модульного тестирования жасмин, мы обычно видели такого рода _service_ внутри Inject для angular.mock.

Но я все еще не уверен, как это работает?

For example, the parameter _myService_ would be resolved as the reference myService. Since it is available in the function body as myService, we can then assign it to a variable defined in an outer scope.

В official doc, это сказать выше, однако, не значит, какую-либо услугу, которая уже внутри впрыскивается модуль, мы должны всегда ссылаться как _MyServiceName_? Как именно это происходит от MyServiceName? Должны ли мы что-то сделать, прежде чем вводить его? Вот где я запутался.

ответ

0

Была введена конвенция о добавлении подчеркивания для облегчения установки модульных тестов. Обычно вы будете иметь имена без подчеркивания, используемого в тестах, как:

var fooService, barService; 

beforeEach(inject(function(_fooService_, _barService_) { 
    fooService = _fooService_; 
    barService = _barService_; 
})); 

it('should blah blah', function() { 
    fooService.foo(); 
    // assert, assert, assert 
}); 

если таковые beforeEach параметров не имеет подчеркивания, то вы не могли бы использовать отдельные имена, как fooService в модульных тестах.

var fooService, barService; 

beforeEach(inject(function(fooService) { 
    // hmm how to setup outher variable fooService? 
})); 

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

beforeEach(inject(function(bazService, _fooService_) { 
    bazService.clearSelection(); 
    fooService = _fooService_; 
})); 

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

Для инъекционного правильной работы необходимо загрузить модуль перед выполнением теста:

beforeEach(module('app')); 

Отличный учебник, как писать AngularJS тестов в официальной документации: https://docs.angularjs.org/guide/unit-testing (если вы хотите просто код - выделите тестирование контроллер, тот же подход подходит для службы тестирования).

+0

so underscore - действительно синтаксис жасмина, который может применяться для любого тестирования приложений js. поэтому он не уникален для углового. это правильно? – Ezeewei

+0

, так что в основном зависимости, которые имеет фактическое приложение, на самом деле не могут быть введены в реальность, но мы должны соответственно их разблокировать. правильно? мы не можем реально вводить фактические зависимости? – Ezeewei

+0

@Chen Нет, нет - это угловой синтаксис инъекции и ничего не имеет с Жасмин - я отредактирую свой ответ – csharpfolk

Смежные вопросы