0

Я новичок в угловом и модульном тестировании.Контрольно-измерительные контроллеры с услугами

У меня есть модуль приложения MyApp включая основные за вещами услуги, которые необходимы во всех других модулях, как сервис для регистрации loggingService

у меня также есть модуль для обработки все о карте & гео-positon, называется MapModule и у меня есть основной модуль для логики приложения, которая называется MainModule

MainModule содержит контроллер, который мне нравится тест: messageSendCtrl контроллер имеет некоторую зависимость, как услуги от MapModule.

И: MainModule и MapModule имеет зависимости от MyApp, так как везде требуется loggingService.

Код выглядит следующим образом (псевдо-код):

MyApp

var MyApp = angular 
     .module('MyApp', ['ngRoute','MainModule','MapModule']); 

MyApp.service('loggingService', function (one, two) { 
    [..] /*logging data somewhere for debugging application*/ 
}); 

MainModule

var MainModule = angular 
     .module('MainModule', []); 
MainModule.controller('messageSendCtrl', 
    function($scope,$http, $location, locationService, loggingService) { 
[...] 
}); 

MapModule

var MapModule = angular 
     .module('MapModule', ['uiGmapgoogle-maps']); 
MapModule.service('locationService', function (loggingService) { 
[...] 

То, что я хотел бы проверить это messageSendCtrl от MainModule. (возможно), я смог ввести службу определения местоположения в тестовую среду. Но инъекция locationService не увенчалась успехом.

Возможно, потому, что locationService также использует loggingService.

Запуск результаты испытаний в

Error: [$injector:unpr] Unknown provider: loggingServiceProvider <- loggingService <- locationService 

Мой тест выглядит так:

describe('saving a document', function() { 

    beforeEach(module('MainModule')); 
    beforeEach(module('MyApp')); 
    beforeEach(module('MapModule')); 

    describe ('messageSendCtrl', function() { 
    var scope,ctrl,locationService,loggingService; 

    beforeEach(inject(function($rootScope, $controller,_locationService_,_loggingService_) { 
     scope = $rootScope.$new(); 
     ctrl = $controller('messageSendCtrl', 
        {$scope: scope, 
        locationService: _locationService_, 
        loggingService : _loggingService_ }); 
    })); 


     it('should actual not saved', function(){ 
     expect(scope.result).to.equal('unsaved'); 
    }); 
    }) 
}); 

Так кто я могу решить зависимостей? Или есть проблема с дизайном в моем приложении?

ответ

1

Есть несколько вещей происходит, давайте проверим это один за другим:

  1. в тесте, вам не нужно делать загружать все модули, загрузить только этот модуль, который вы хотите проверить, ваш Ctrl в вашем MainModule, так что используйте только beforeEach(module('MainModule'));
  2. каждый модуль должен заявить о своих зависимостей, так что ваша декларация MainModule должна выглядеть следующим образом: var MainModule = angular.module('MainModule', ['MyApp']); потому, что один из контроллера в вашем MainModule зависит от сервиса, который находится в другом модуле (MyApp)
  3. легче проверить, если один модуль делает только одно, поэтому, если у вас есть служба ведения журнала, создайте для этого модуль службы ведения журналов и включите этот модуль, где вы хотите использовать ведение журнала. Так что не делайте модули, которые отвечают за разные вещи, потому что, если другой модуль нуждается в протоколировании, этот модуль получит любую другую услугу, которую содержит ваш «godmodule», и это сложно проверить и найти ошибки.
+0

Номер 1 и 2. Вот и все! Спасибо! Номер 3: приятно знать. –