2013-10-13 5 views
2

저는 단위 테스트와 AngularJS에서 새로운 것으로 고칠 수없는 문제가 있습니다. 내 테스트 중 하나가 작동하지 않습니다. 나는 값에 영향을줌으로써 나의 테스트에서 location.path()를 시작하려하지만, 내 컨트롤러에서 location.path()는 여전히 정의되지 않은 값을 가지고있다. 여기

내 CONTROLER입니다 :

angular.module('...') 
.controller('SignUpCtrl', ['$location', function ($location) { 

    // Retrieve type of user 
    var userType = $location.path().substr(9); 
    if(userType == 'member'){ 
     userType = 'user'; 
    } 

    console.log($location.path()); 
    console.log(userType); 

    $scope.uType = userType; ]); 

그리고 여기 내 테스트 모듈 :

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

// load the controller's module 
beforeEach(module('...')); 

var SignUpCtrl, 
    scope, 
    mockBackend, 
    environments, 
    location, 
    store; 

beforeEach(inject(function ($controller, $rootScope, $httpBackend,$location,_Environments_) { 
    environments = _Environments_; 
    mockBackend = $httpBackend; 
    location = $location; 
    scope = $rootScope.$new(); 

    SignUpCtrl = $controller('SignUpCtrl', { 
     $scope: scope, 
     $location: location 
    }); 
})); 

it('should come from the right location', function(){ 
    location.path('/sign-up/member'); 
    expect(location.path()).toBe('/sign-up/member'); 

    expect(scope.uType).toBe('user'); //Do not work 
}); 

});

답변

2

당신은 정말 엔드 - 투 - 엔드 (또는 E2E) 테스트를 사용하여 달성 할 수있는 일을 할 수 단위 테스트를 사용하려고하고 있습니다. AngularJS의 단위 테스트는 주어진 모듈 또는 하위 모듈 (예 : service, factory, directive 등) 내의 자바 스크립트를 테스트하도록 설계되었습니다. 그러나 페이지 탐색이나 브라우저 위치와 같은 것들은 종단 간 테스트 환경에서 실제로 테스트해야합니다.

덕분에 $ 위치 개체에 일반적인 방법 (예 : path, url 등)이 모두 포함되지는 않습니다. $ location 객체는 모듈에서 얻을 수있는 실제 $ location 객체의 "모의 (mock)"로 끝납니다. 따라서 테스트 사례를 it('should come from the right location', function(){ ... })으로 이동하여 엔드 투 엔드 테스트를 수행 한 다음 다른 모듈 별 단위 테스트를 계속 진행하면됩니다. 당신이 그렇게하면, 당신은 단지 다음과 같이 $scope 변수를 잡아하여 $ 컨트롤러를 단순화 할 수 있습니다 : E2E 테스트를위한 가이드가 this link에서 찾을 수 있습니다

scope = $rootScope.new(); 
SignUpCtrl = $controller('SignUpCtrl', {$scope: scope}); 

. 좋은 E2E 테스트를 작성하는 방법을 안내합니다. 분도기라는 각도 E2E 테스트를 수행하는 데 사용할 수있는 훌륭한 프레임 워크가 있습니다. 그 정보는 this link입니다. 분도기는 Karma를 E2E 테스트를 처리하는 더 좋은 방법으로 곧 교체 할 것입니다 (1.2에서).

+0

응답 해 주셔서 감사합니다. E2E 테스트를 살펴 보겠습니다. 단위 테스트에서 무엇을 테스트하고 E2E에서 무엇을 테스트 할 지 여전히 꽤 혼란 스럽습니다. – user2876974

관련 문제