Я создаю приложение Ionic 4 + Angular 7. В приложении у меня есть страница видео, на которой я получаю URL-адреса видео из API бэкэнда через сервисы инъекций. Вызов со страницы в videoService обрабатывается в асинхронной функции fetchVideoData ()
async fetchVideoData() {
await this.videoService.getVideos().subscribe(data => {
this.videoData = JSON.parse(JSON.stringify(data));
const videoDataArrayLength = this.videoData.videosURLs.length;
const videoArray = [];
const videoUrlsArray = [];
for (let i = 0; i < videoDataArrayLength; i++) {
videoArray.push(this.videoData.videosURLs[i]);
videoUrlsArray.push(this.videoData.videosURLs[i]['videoUrl']);
if (this.videoData.videosURLs[i]['id'] === this.videoIdFromGameDetailPage) {
this.arrayIterator = Number(this.videoData.videosURLs[i]['id']);
this.arrayIterator--;
this.videoUrlFetched = this.videoData.videosURLs[this.arrayIterator]['videoUrl'];
}
}
this.isUrlYoutube = this.videoUrlFetched.includes(this.substring);
});
}
эта функция вызывается в ngOnInit ()
ngOnInit() {
this.activatedRoute.params.subscribe(data => {
this.videoIdFromGameDetailPage = data['vid'];
});
this.fetchVideoData().then(() => {
this.isDataFromVideoApiReady = true;
});
}
Все это работает нормально. Проблема в тестовом примере этого fetchVideoData () асинхронный метод
Вот тестовый пример для этого метода -
it('should get video data from observable', fakeAsync(() => {
let arrayIteratorStub: number;
let videoUrlFetchedStub: string;
spy = spyOn(videoService, 'getVideos').and.returnValue(of(videoDataStub));
component.ngOnInit();
tick();
component.fetchVideoData().then((result) => {
expect(videoService.getVideos).toHaveBeenCalled();
expect(component.videoData).toBe(videoDataStub);
for (let i = 0; i < videoDataStub.videosURLs.length; i++) {
expect(videoDataStub.videosURLs[i]['id']).toEqual(ActivatedRouteSpy.params['vid']);
arrayIteratorStub = Number(videoDataStub.videosURLs[i]['id']);
arrayIteratorStub--;
videoUrlFetchedStub = videoDataStub.videosURLs[arrayIteratorStub]['videoUrl'];
}
isUrlYouTubeStub = videoUrlFetchedStub.includes('youtube');
expect(component.isUrlYoutube).toEqual(isUrlYouTubeStub);
});
}));
Во время выполнения теста я получаю это -
TypeError: Невозможно прочитать свойство 'includes' из неопределенного
И я застрял в этом. Я понятия не имею, почему он возвращает эту ошибку. Я перепробовал все, что знаю. Кто-нибудь может мне с этим помочь? Я новичок в Angular и Ionic так много раз, что не знаю, что делаю?