2017-03-12 1 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', 
}); 
내가 컨트롤러를 테스트하고 싶은

, 나는 범위에 전달 된 맥주 호출에 의해 제공되는 하나인지 여부를 확인하려면 다음과 같은 시험을 만든 : BeerSelection.getBeerSelected() :

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); 
    }); 
    }); 

나는 어떻게해야합니까를 다음과 같은 오류 :

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' 
.... 

나는이 sould 작업을

+0

감사를 생각한다! 지금 당장 : 'BeerDetailController'라는 이름의 컨트롤러가 등록되지 않았습니다. 왜 그럴까요? – Anto

+0

간단한 견적을 사용하여 컨트롤러에 전달하는 모든 사용자 정의 ($ scope, ...와 같은 각도 서비스에는 적용되지 않음)는 모듈에 등록해야합니다. 각성 된 의사가 귀하를 도울 수 있습니다. https://docs.angularjs.org/guide/services. 그것은 Spring CDI와 같은 방식으로 작동합니다. –

+0

음 나는 지금 약간 혼란 스럽다. 어디서 BeerDetailController를 등록해야합니까? – Anto