0

안녕하세요 저는 Angular2에서 구성 요소를 테스트하려고하는데 내 서비스를 모의하려고 할 때 문제가 발생했습니다. 현재 Angular2 문서를 테스트 중입니다.Angular2 테스트 구성 요소

저는 JWT 토큰을 가지고있는 한 정상적으로 작동하는 각도 서비스에서 작성한 백엔드 API를 호출합니다. 하지만 테스트 할 때는 컴포넌트 테스트에서 서비스를 조롱하고 싶습니다.

서비스

@Injectable() 
export class ItemService { 
    constructor(private _http: AuthHttp, private _store: Store<AppStore>) {} 

     items(): Observable<any[]> { 
      return this._http.get(ENDPOINT_ITEMS, {withCredentials: false}) 
       .map((response: Response) => response.json().data); 
     } 
} 

구성 요소

@Component({ 
selector: 'items', 
template: require('./items.component.html'), 
providers: [ItemService] 
}) 

export class ItemsComponent { 
items: Observable<Array<Object>>; 

constructor(private _service: ItemService) {} 

    ngOnInit(): any { 
    this.items = this._service.items(); 
    } 
} 

구성 요소 테스트

beforeEach(() => { 
TestBed.configureTestingModule({ 
    declarations: [ ItemsComponent ], 
    providers: [ 
     { provide: ItemService, useValue: itemsMock }, 
    ] 
}); 
fixture = TestBed.createComponent(ItemsComponent); 
itemService = fixture.debugElement.injector.get(ItemService) 

나는 나를 이렇게 나는 것을 테스트 할 수 있습니다 내 조롱 ItemService에서, useValue, itemsMock을 반환하고자하는 내 HTML 태그에 올바른 데이터가 있습니다. 내 서비스가 조롱 받고있는 것처럼 보이지 않습니까?

이 오류를 얻기 :

Error: Error in ./ItemsComponent class ItemsComponent_Host - inline template:0:0 caused by: No provider for AuthHttp! in karma.entry.js (line 17341)

답변

1

구성 요소는 공급 업체에서 ItemService있다. 즉, 구성 요소의 인스턴스가 만들어 질 때마다 구성 요소에 대한 새 ItemService 인스턴스가 만들어집니다. 모듈 수준의 서비스는 사용되지 않습니다.

귀하의 서비스는 무국적이며 구성 요소 레벨에있을 이유가 없습니다. 공급자에서 제거하고 모듈의 공급자에 있는지 확인하십시오.

+0

정말 고마워요! 한 걸음 더 나아가 리팩토링하는 시간입니다! – mertje

관련 문제