2017-01-29 6 views
0

Я довольно новый для Angular и очень новый для тестирования Jasmine. У меня есть функция в моем контроллере при нажатии объекта в пустой массив (объект, взятый из json-данных).Как проверить мои функции угловой сферы в карма + жасмин?

мой контроллер с функциями, относящиеся к корзине:

$scope.cart = []; 

    $scope.addItemToCart = function(choc) { 
    var cartItem = readCartItem(choc.id); 
    if(cartItem == null) { 
     //if item doesn't exist, add to cart array 
     $scope.cart.push({type: choc.type, id: choc.id, price: choc.price, quantity: 1}) 
    } else { 
     //increase quantity 
     cartItem.quantity++; 
    } 
    } 

    $scope.cartTotal = function() { 
    var sum = 0; 
    $scope.cart.forEach(function(item) { 
     sum += item.price * item.quantity; 
    }); 
    return sum; 
    } 

    $scope.getTotalQuantity = function() { 
    var totalItems = 0; 
    $scope.cart.forEach(function(item) { 
     totalItems += item.quantity; 
    }); 
    return totalItems; 
    } 

    $scope.clearCart = function() { 
    $scope.cart.length = 0; 
    } 

    $scope.removeItem = function(choc) { 
    $scope.cart.splice(choc,1); 
    } 

    function readCartItem(id) { 
    //iterate thru cart and read ID 
    for(var i=0; i<$scope.cart.length; i++) { 
     if($scope.cart[i].id === id) { 
     return $scope.cart[i] 
     } 
    } 
    return null; 
    } 

Мой тест:

describe('Controller: ChocoListCtrl', function() { 

    beforeEach(module('App')); 

    var scope, ctrl, json; 

    beforeEach(inject(function ($controller, $rootScope) { 


    scope = $rootScope.$new(); 
    // ChocoListCtrl = $controller('ChocoListCtrl', {}); 
    ctrl = $controller("ChocoListCtrl", { $scope:scope }) 
    })); 

    it('should be defined', function(){ 
    expect(ctrl).toBeDefined(); 
    }); 

    it('should have an empty cart', function(){ 
    expect(scope.cart.length).toBeLessThan(1); 
    }); 

    describe('cart functions', function(){ 
    beforeEach(function(){ 
     scope.addItemToCart(); 
    }) 

    it('should add objects into the cart', function(){ 
     expect(scope.cart.length).toBeGreaterThan(0); 
    }) 
    }); 

Ошибка Возвращаюсь с при выполнении теста:

TypeError: undefined is not an object (evaluating 'choc.id') 

I думал, что я толкаю объект в массив? Я что-то упускаю? Должен ли я включать JSON-файл, если это помогает?

Любое руководство поможет. Спасибо!

ответ

0

Вы не передаете параметр $scope.addItemToCart. Поэтому, когда он пытается читать choc, он не может, потому что это undefined.

Эта строка вызывает ошибку:

beforeEach(function(){ 
    scope.addItemToCart(); // No parameter being passed in 
}) 
+0

Doh. Спасибо!!! Мне нужен мой кофе, прежде чем я начну делать что-то подобное ... –

+0

Ха-ха, без проблем, мы все это делаем, и всем нам нужен наш кофе! –