Проблема с подпиской на наблюдаемый

У меня есть следующий код как часть службы:

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));
   }

}

Итак, ваша проблема внутри unittest?

Vova Bilyachat 11.12.2018 03:43

@VolodymyrBilyachat нет, проблема возникает в компоненте, в который импортируется сервис

mateuszs 11.12.2018 03:54

Можете ли вы открыть консоль разработчика и проверить сеть?

Vova Bilyachat 11.12.2018 04:25

@VolodymyrBilyachat - при открытой сети, похоже, нет соответствующего запроса (ни один из URL-адресов не соответствует тому, что введено в эксплуатацию).

mateuszs 11.12.2018 11:04

Не могли бы вы опубликовать полный исходный код вашего сервиса и компонента?

Vova Bilyachat 11.12.2018 11:36

@VolodymyrBilyachat Я обновил сообщение с соответствующим кодом

mateuszs 11.12.2018 11:52
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
6
35
1

Ответы 1

Вероятно, вы получаете ошибку при 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, я попытался зарегистрировать ошибку, однако журнал не отображается (или добавляется пустой журнал).

mateuszs 11.12.2018 03:13

Другие вопросы по теме