0

Привет, я пытаюсь пройти тестирование моих компонентов в Angular2, но столкнулся с проблемой, когда я пытаюсь высмеять мое обслуживание. В настоящее время я следую за документами Angular2 по тестированию.Компонент Angular2 test

Я называю свой backend API, который я создал из углового сервиса, который работает нормально, пока у меня есть токен JWT. Но когда дело доходит до тестирования, я просто хотел бы издеваться над сервисом в своем тестовом компоненте.

служба

@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