2015-09-23 3 views
0

Я изучаю AngularJS какое-то время, и, наконец, нахожусь в голове, как он работает, будучи многолетним разработчиком.AngularJS Jasmine Tests

Однако у меня возникли проблемы с пониманием того, как модульное тестирование работает с Karma + Jasmine.

Каждая статья, которую я прочитал, либо останавливается при проверке переменной $ scope контроллера для значения или погружений до глубокого конца, я теряюсь в первом абзаце.

Я надеюсь, что кто-то может написать демо-тест для этого контроллера, так что я могу получить мою голову вокруг, как проверить функции контроллера с локальными переменными и т.д.

financeApp.controller('navController', ['$scope', '$resource', '$cookies', '$location', function ($scope, $resource, $cookies, $location) { 
    // Set default values 
    $scope.resultList = []; 
    $scope.cookieExp = moment().add(3, 'months').toDate(); 
    $scope.dataLoaded = true; 
    $scope.codesList = []; 

    // Update watchlist item stock prices 
    $scope.updateWatchItem = function (items) { 

     sqlstring = items.join("\",\""); 

     var financeAPI = $resource('https://query.yahooapis.com/v1/public/yql', {callback: "JSON_CALLBACK" }, {get: {method: "JSONP"}});   
     financeAPI.get({q: decodeURIComponent('select%20*%20from%20yahoo.finance.quote%20where%20symbol%20in%20(%22' + sqlstring + '%22)'), 
       format: 'json', env: decodeURIComponent('store%3A%2F%2Fdatatables.org%2Falltableswithkeys')}) 
     .$promise.then(function (response) { 
       var quotes = response.query.results.quote; 
       quotes = Array.isArray(quotes) ? quotes : [quotes]; 
       quotes.forEach(function (quote) { 
        $scope.createWatchItem(quote); 
       }); 

      }, function (error) { 
       alert("ERROR: There was an issue accessing the finance API service."); 
      }); 
    }; 

    // Add a new watchlist item (triggered on button click) 
    $scope.newWatchItem = function() { 
     var newcode = $scope.asxcodeinput; 

     if (newcode == null) { 
      alert('Please enter a valid ASX equities code...'); 
      return; 
     } 
     else if ($scope.codesList.indexOf(newcode + '.AX') > -1) { 
      alert('You are already tracking ' + newcode.toUpperCase() + '!'); 
      return; 
     } 

     $scope.dataLoaded = false; 

     var financeAPI = $resource('https://query.yahooapis.com/v1/public/yql', {callback: "JSON_CALLBACK" }, {get: {method: "JSONP"}});   
     financeAPI.get({q: decodeURIComponent('select%20*%20from%20yahoo.finance.quote%20where%20symbol%20in%20(%22' + newcode + '.AX%22)'), 
       format: 'json', env: decodeURIComponent('store%3A%2F%2Fdatatables.org%2Falltableswithkeys')}) 
     .$promise.then(function (response) { 
       $scope.dataLoaded = true; 
       var quote = response.query.results.quote; 

       if(quote.StockExchange != null) { 
        $scope.createWatchItem(quote); 
        $cookies.putObject('codesCookie', $scope.codesList, {expires: $scope.cookieExp}); 
        $location.path('/' + (quote.Symbol).split('.')[0].toUpperCase()); 
       } 
       else { 
        alert("Woops! Looks like that stock doesn't exist :("); 
       } 
      }, function (error) { 
       alert("ERROR: There was an issue accessing the finance API service."); 
      }); 
     $scope.asxcodeinput = ""; 
    }; 

    // Delete a watchlist item (triggered on delete icon click) 
    $scope.deleteWatchlistItem = function (asxcode) { 
     $scope.resultList.forEach(function (result, key) { 
      if(result.Symbol == asxcode) { 
       $scope.resultList.splice(key, 1); 
      } 
     }); 
     $scope.codesList.forEach(function (code, key) { 
      if(code == asxcode) { 
       $scope.codesList.splice(key, 1); 
      } 
     }); 
     $cookies.putObject('codesCookie', $scope.codesList, {expires: $scope.cookieExp}); 

     $location.path('/'); 
    }; 

    // Add new watchlist item to lists of watched items 
    $scope.createWatchItem = function (quote) { 
     $scope.resultList.push(quote); 
     $scope.codesList.push(quote.Symbol); 
    }; 

    // Get current page for navigation menu CSS 
    $scope.isActive = function (location) { 
     return location === $location.path(); 
    }; 

    // If the cookie is set and not empty, populate the watchlist items with the cookie contents 
    if($cookies.getObject('codesCookie') && $cookies.getObject('codesCookie').length > 0) { 
     $scope.updateWatchItem($cookies.getObject('codesCookie')); 
    } 
}]); 

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

+0

Это может помочь вам http://www.sitepoint.com/unit-testing-angularjs-services-controllers-providers/ –

ответ

0

Это большой кусок для начала тестирования. Я предлагаю взглянуть на обучающую страницу REST и Custom Services на угловом сайте и поместить ресурсы в службу.

Предлагаю посмотреть хорошие видео на жасмине по адресу https://www.youtube.com/channel/UC4Avh_hoUNIJ0WL2XpcLkog Я рекомендую вам посмотреть и включить шпионаж.

+0

Спасибо. Я переработал код, связанный с $ resource, в службу, которая, как я надеюсь, сделает тестирование еще проще. Я прочитаю и посмотрю, как я пойду. – Seonixx

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