2017-01-29 12 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') 

私は私はオブジェクトを配列に押し込んでいると思った?何か不足していますか? JSONファイルが役立つ場合は、そのファイルを含める必要がありますか?

ガイダンスが役立ちます。ありがとうございました!

答えて

0

$scope.addItemToCartにパラメータを渡していません。だから、chocを読むと、それはundefinedなのでできません。

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

Dohの:

この行

は、エラーの原因となっています。ありがとうございました!!!私はこのようなことをやる前にコーヒーが必要です... –

+0

母は問題ありません。私たちは皆それをします。 –

関連する問題