Что я должен проверить для моего углового контроллера?

0

Я научился использовать Karma для тестирования моего приложения angularjs. Однако некоторые из моих контроллеров не используют несколько сервисов, которые являются http-запросами, которые извлекают json, который затем загружается на страницу. Я застрял из-за двух вопросов, на которые я не могу ответить. 1) Как мне имитировать эти сервисы? 2) что именно я должен проверить для своего контроллера. Вопрос 2 Мне сложно ответить, потому что функции контроллера зависят от служб, которые я использую в других контроллерах. Во всяком случае, позвольте мне показать один из моих контроллеров, а затем "библиотеку", в которой хранятся мои услуги:

Один из моих контроллеров

angular.module('ccApp')
.controller('CountriesCtrl', ['$scope', '$routeParams',              '$location','countryInfo', 'getCountries', 'countriesCache', 'getNeighbors', 
   'buildCountry', '$timeout', '$q',
    function($scope, $routeParams, $location, countryInfo, getCountries,     countriesCache, getNeighbors, 
    buildCountry, $timeout, $q){            
    getCountries.countriesObject.then(function(response){
        $scope.geocountries = response.data.geonames;
    },
    function(response){
        alert("error");
    });

    $scope.toCountry = function(geocountry){
        getNeighbors(geocountry.geonameId)
        .then(function(response){
            buildCountry(geocountry, response);
            var path = '/countries/'+countryInfo.name+'/capital';
            $location.path(path);
        }),
        function(response){
            alert('Error');
        };
    };
    $scope.goHome = function(){
        $location.path('/');
    };

}]);

Что я должен проверить в спецификации контроллера?

Здесь библиотека, где размещаются услуги:

angular.module('library', [])
.service('countryInfo', function(){
    var country = {
        name: '',
        pop: '',
        area: '',
        capital: '',
        code: '',
        capPop: '',
        numNeigh: 0,
        neighbors: []
    };
    return country;
 })
 .factory('countriesCache', ['$cacheFactory', function($cacheFactory){
    return $cacheFactory('countriesCached');
  }])
 .factory('getCountries', ['$http', function($http){
    var request = {
            username: 'vman'
        };
    return { countriesObject : $http({
            method: 'GET',
            url: 'http://api.geonames.org/countryInfoJSON', 
            params: request
        })};
  }])
  .factory('getCountry', ['$http', function($http){
    return function(countryCode){
        return $http({
            method: 'GET',
            url: 'http://api.geonames.org/countryInfoJSON',
            params: { username: 'vman', country: countryCode }
        });
    };
  }])
  .factory('getNeighbors', ['$http', function($http){
    return function(geonameId){
        return $http({
            method: 'GET',
            url: 'http://api.geonames.org/neighboursJSON',
            params: { username: 'vman', geonameId: geonameId }
        });
    };
  }])
  .factory('buildCountry', ['countryInfo', '$q', '$timeout',      function(countryInfo, $q, $timeout){
    return function(geocountry, response){
        countryInfo.name = geocountry.countryName;
        countryInfo.code = geocountry.countryCode;
        countryInfo.pop = geocountry.population;
        countryInfo.area = geocountry.areaInSqKm;
        countryInfo.capital = geocountry.capital;
        countryInfo.neighbors = response.data.geonames;
        countryInfo.numNeigh = response.data.geonames.length;
    };
  }])
  .run(['$rootScope', '$location', function($rootScope, $location) {
      $rootScope.$on('$routeChangeError', function() {
         $location.path('/error');
     });
  }]);
Теги:
karma-jasmine

1 ответ

0
  1. Следующий фрагмент создает макет вышеуказанной услуги:

    модуль (функция ($)). $ service.service('demoService', function() {this.isDemoApi = jasmine.createSpy('isDemoApi');});});

    //Получение ссылки на издеваемую службу

    var mockDemoSvc;

    inject(function(demoService) {
        mockDemoSvc = demoService;
    });
    
  2. Чтобы протестировать контроллер, во-первых, вам придется издеваться над всеми услугами, которые использует этот контроллер, используя приведенный выше код. Это поможет тестировать контроллеры API отдельно. Затем вы можете проверить API, привязанные к области, например: toCountry()

  • 0
    @suneet_bansal Спасибо за подробное описание макета. Я попробую это позже. Итак, правильно ли я вас понимаю, я тестирую не сам сервис, а функцию объема, которая вызывает сервис? Более конкретно, я проверяю, что функция области действия вызывает службу, в данном случае чисто фиктивную.
  • 0
    Да, вы грохните.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню