2017-03-12 5 views
1

私はAngularJSを初めて使用しています。テンプレートと関連するコントローラを含む次のコンポーネントを作成しました。ジャスミンテスト:等しいと予想される未定義オブジェクト

angular. 
module('beerDetail'). 
controller('BeerDetailController', ['BeerSelection', '$scope', '$rootScope', 
    function BeerDetailController(BeerSelection, $scope, $rootScope) { 

    let beerSelected = BeerSelection.getBeerSelected(); 

    $scope.ok =() => { $rootScope.modalInstance.close() }; 
    $scope.beer = beerSelected; 
    $scope.foodPairings = beerSelected.food_pairing.join(", "); 

    this.getFormattedIngredients = (ingredients) => {...}; 

    this.getFormattedMethod = (method) => {...}; 

    $scope.allIngredients = this.getFormattedIngredients(beerSelected.ingredients); 
    $scope.method = this.getFormattedMethod(beerSelected.method); 
    } 
]). 
component('beerDetail', { 
    templateUrl: '/components/beer-detail/beer-detail.template.html', 
    controller: 'BeerDetailController', 
}); 

私はスコープに渡されたビールは呼び出すことが提供するものであるかどうかを確認し、次のテスト作成した、コントローラをテストしたいと思います:私は入手できますか

describe('BeerDetailController', function() { 

    it('returns the selected beer', function() { 

     beforeEach(module('beerDetail')); 

     let $controller; 
     let scope; 
     let rootScope; 
     let createController; 
     let beerSelection; 
     let beerSelected = { 
     "id": 192, 
     "name": "Punk IPA 2007 - 2010", 
     }; 

    beforeEach(inject(function ($rootScope, $controller) { 
     scope = $rootScope.$new(); 
     createController = function() { 
      return $controller('BeerDetailController', 
      {'BeerSelection': beerSelection}, 
      {'$scope': scope}, 
      {'$rootScope': rootScope} 
      ); 
      spyOn(beerSelection, 'getBeerSelected').and.returnValues(beerSelected); 
     }; 
    })); 

    expect(scope.beer).toEqual(beerSelected); 
    }); 
    }); 

BeerSelection.getBeerSelected()を次のエラーが発生しました:

Expected undefined to equal Object({ id: 192, name: 'Punk IPA 2007 - 2010' })

問題がどこにあるのでしょうか?前もって感謝します!

答えて

2

createControllerメソッドを実際に呼び出す必要があります。あなたの前であなたがした仕事がちょうど完了した。

createController();  
expect(scope.beer).toEqual(beerSelected); 

は(コメントの編集)を登録するには

を作業する必要があります。

angular. 
module('beerDetail'). 
controller('BeerDetailController', {your controller function}). 
component('beerDetail', { 
    templateUrl: '/components/beer-detail/beer-detail.template.html', 
    controller: 'BeerDetailController' 
.... 

私は、これは

+0

おかげで仕事souldと思います!私は今: "BeerDetailController"という名前のコントローラは登録されていません。なぜですか? – Anto

+0

単純な引用符でコントローラに渡すすべてのカスタム($ scopeなどの角度サービスには適用されません)は、モジュールに登録する必要があります。角度のある書類はあなたに役立ちます:https://docs.angularjs.org/guide/services。それはSpring CDIと同じように動作します。 –

+0

mmm私はちょっと混乱しています。 BeerDetailControllerはどこに登録すればよいですか? – Anto

関連する問題