У меня есть следующий код как часть службы:
return this.httpClient.get<Country[]>('http://localhost:8080/countries');
Он проходит модульный тест с фиктивными значениями. Однако при использовании в функции ngOnInit () он не присваивает соответствующие значения переменной.
this.supportedCountriesFetcherService.fetchSupportedCountries().subscribe((data) => (this.supportedCountries = data));
Я тестировал почтальона, и localhost возвращает соответствующий json. Если бы я регистрировал данные подписки вместо того, чтобы назначать их, не возвращались бы зарегистрированные данные (фактически, либо был бы добавлен пустой журнал, либо его не было вообще).
Как я могу решить эту проблему?
Редактировать:
Код, связанный с сервисом (без интерфейсов):
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class SupportedCountriesFetcherService {
public fetchSupportedCountries(): Observable<Country[]> {
return this.httpClient.get<Country[]>('http://localhost:8080/countries');
}
constructor(private httpClient: HttpClient) { }
}
Код, связанный с компонентом:
import { Component, OnInit } from '@angular/core';
import { Country, SupportedCountriesFetcherService } from 'src/app/services/supported-countries-fetcher.service';
@Component({
selector: 'app-input-form',
templateUrl: './input-form.component.html',
styleUrls: ['./input-form.component.css']
})
export class InputFormComponent implements OnInit {
private supportedCountries: Country[];
constructor(private supportedCountriesFetcherService: SupportedCountriesFetcherService) { }
ngOnInit() {
this.supportedCountriesFetcherService.fetchSupportedCountries()
.subscribe((data) => this.supportedCountries = data, (error) => console.info(error));
}
}
@VolodymyrBilyachat нет, проблема возникает в компоненте, в который импортируется сервис
Можете ли вы открыть консоль разработчика и проверить сеть?
@VolodymyrBilyachat - при открытой сети, похоже, нет соответствующего запроса (ни один из URL-адресов не соответствует тому, что введено в эксплуатацию).
Не могли бы вы опубликовать полный исходный код вашего сервиса и компонента?
@VolodymyrBilyachat Я обновил сообщение с соответствующим кодом





Вероятно, вы получаете ошибку при HTTP-запросе. Попробуйте изменить подписку, чтобы добавить обработчик ошибок, например:
this.supportedCountriesFetcherService.fetchSupportedCountries()
.subscribe(
(data) => this.supportedCountries = data,
(err) => console.error(err);
);
и вы должны увидеть ошибку.
Я предполагаю, что ваше приложение Angular работает на порту 4200, а это означает, что, если вы не используете прокси-сервер, вы, вероятно, получаете ошибку CORS.
В этом случае для разработки проще всего настроить прокси-сервер.
Вы можете прочитать официальную документацию по настройке прокси-сервера webpack dev по адресу https://angular.io/guide/build#proxying-to-a-backend-server
Спасибо за ответ, к сожалению, я уже настроил CORS, я попытался зарегистрировать ошибку, однако журнал не отображается (или добавляется пустой журнал).
Итак, ваша проблема внутри unittest?