2016-08-25 3 views
0

다음은 모듈 및 단위 테스트 설정입니다. $ state을 설정하려고 시도하면 $injector.get("$state")은 항상 재미 알 수없는 공급자를 던졌습니다. $ stateProvider < - $ state 오류 및 그 이유를 알 수 없습니다.

angular.module("my-module", [ 
     //Third Party 
     "ui.bootstrap", 
     "ui.router", 
     "toaster", 
     "angular-loading-bar", 
     "ngAnimate", 
     "ngSanitize", 
     "ApplicationInsightsModule", 
     "pascalprecht.translate" 
]); 

describe("something descriptive and helpful",(): void => { 
    // a bunch of other service variables.... 
    var $state: any; 

    // I've tried with and without this line 
    beforeEach(() => angular.module("ui.router")); 

    beforeEach(() => { 

     angular.module("my-module"); 

     inject(($injector: ng.auto.IInjectorService): void => { 
      // a bunch of other service variable assignments 
      $state = $injector.get("$state"); 
     }); 
}); 
+0

스펙에서 실제 라우터를 사용하는 것은 어색함을 알아야합니다. 가능하면 $ stateProvider/$ state mocks를 사용하십시오. – estus

+0

@estus 그래서 전체 경로 구성을 조롱해야한다면 ... 테스트의 요점은 무엇입니까? 그 시점에서 코드를 실제로 다시 작성하고 있습니다. 맞습니까? 그만한 가치는없는 것 같습니다. – Yatrix

답변

2

당신은 모듈을로드

angular.mock.module("my-module") 

를 호출해야합니다.

+0

모의하고 $ 상태를 해결하려고했지만 내 ui-router 상태는 사용할 수 없습니다. '$ state.go ("home")'은 작동하지 않습니다. – Yatrix

+0

그 이유를 이해할 수있는 코드가 충분하지 않지만, 단위 테스트에서 일반적으로하는 일이 상태가되지는 않습니다. 일반적으로 $ state.go() 서비스에 대한 스파이 컨트롤러를 테스트하고 컨트롤러가 폼을 성공적으로 제출 한 후 $ state.go()를 호출하여 올바른 상태로 이동하는지 확인합니다 (예 :). 상태. –

+0

죄송합니다. 약간의 배경이 도움이 될 것 같습니다. 내가 뭘 하려는지 단위 테스트 구성입니다. 그래서'$ state.go ("home")'을 호출하면'$ state.current.name'을 검사하거나'url == "\ home"을 검사 할 수 있습니다. 이것은 내 질문의 범위를 벗어나는 것이므로 귀하의 답변을 수락했습니다. 그것은 내가 어려움을 겪었던 나를위한 퍼즐의 일부입니다. – Yatrix

1

$stateProvider$state의 조롱 지점은 타사 서비스를 스터핑하고 자신의 코드 만 격리되어 테스트하므로 움직이는 부분 수가 줄어 듭니다.

그것은 기본적으로 ui.router 모듈이 추가 스터 빙을 필요로하기 때문에 테스트 모듈을로드 할 예정되지 않은이 시점에서

beforeEach(module("my-module", ($provide) => { 
    $provide.factory('$state', ($q) => ({ 
    go: jasmine.createSpy().andCallFake(() => $q.resolve()); 
    })); 
})); 

it('...', inject(($state, ...) => { 
    ... 
    expect($state.go).toHaveBeenCalledWith('stateName'); 
}); 

입니다.

경로 구성을 테스트하는 방법에 대한 설명은 this answer을 참조하십시오.

관련 문제