2017-09-17 1 views
1

테스트를 작성하려고하는 서비스를 설정했습니다.각도 단위 테스트 HttpClientTestingModule 요청이 생성되지 않습니까?

https://github.com/auth0/angular2-jwt 라이브러리를 사용합니다. AuthHttp 서비스를 제공하고 있지만 테스트에 HTTP 대신 사용하라는 메시지가 표시됩니다.

서비스 자체가 정상적으로 작동하는 것으로 보이지만 테스트를 작성하는 데 어려움이 있습니다.

HTTP 응답을 모의하고 값을 테스트하기 위해 HttpClientTestingModule을 Angular에서 사용하려하지만 서비스에서 'getLookups'함수가 실행되지 않는 것 같습니다.

getLookup(id: number): Observable<Lookup[]> { 
    const _lookups: Subject<Lookup[]> = new Subject(); 
    const lookups: Observable<Lookup[]> = _lookups.asObservable(); 

     this.authHttp.get(this.config.api.baseAPI + '/api/property/' + id + '/lookup') 

     .subscribe(data => { 

       const lookupsRaw = data.json(); 
       const lookUpsParsed: Lookup[] = []; 
       lookupsRaw.forEach((lup) => { 
        lookUpsParsed.push(new Lookup(lup.id, lup.label)); 
       }); 

       console.log(lookUpsParsed); 
       _lookups.next(lookUpsParsed); 
      }, 
      err => console.log('Error!!!!'+ err), 
      () => console.log('Request Complete!!') 
     ); 
    return lookups; 
} 

이 내가 그 하나 잘못하시기 바랍니다 하겠어 어디

describe('SurveyService',() => { 



beforeEach(() => { 


    TestBed.configureTestingModule({ 
     imports: [HttpModule, HttpClientTestingModule], 
     providers: [ 
      AuthHttp, 
      SurveyService, 
      ConfigurationService, 
      {provide: AuthHttp, useExisting: Http} 


     ] 
    }); 


}); 

afterEach(inject([HttpTestingController], (httpMock: HttpTestingController) => { 
    httpMock.verify(); 
})); 

it('should be created', 
    inject([HttpTestingController, SurveyService], (httpMock: HttpTestingController, service: SurveyService) => { 

      expect(service).toBeTruthy(); 

      service.getLookup(7).subscribe(lookup => { 


      }); 
     const req = httpMock.expectOne('/api/property/7/lookup'); 
     req.flush({name: 'Test Data'}); 
     } 
    )); 

}); 

사람이 말해 줄 수 실행할 strying하고있는 시험은 무엇입니까?

감사합니다, 우베

답변

0

이 같은 일을 시도해보십시오

it('',async(done)=>{ 
... 
service.getLookup(7).subscribe(lookup => { 
    expect(...).tobe(...); 
    done(); 
    }); 
}); 

내 생각 엔 당신의 코드가 비동기이기 때문에, 당신이 응답 할 때까지 기다릴 필요가있다. 이것이 바로 한 가지 방법입니다.

관련 문제