Angular 5 Карма-Жасмин неожиданное поведение - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь написать юнит-тест, и у меня есть проблема с одним из полей, которые я объявил внутри моего компонента.У меня есть компонент GenerateReportComponent

private reportSettings: ReportSettings;
private functions: Array<{ id: number, name: string }> = [];
private selectedFunctions: Array<{ id: number, name: string }> = [];
private eventsSubject: Subject<ReportSettings> = new Subject<ReportSettings>();

public constructor(
   private commonService: CommonService,
   private internalFunctionsService: InternalFunctionsService) {
}

public ngOnInit(): void {
}

Внутри HTML этого компонента я использую другой компонент.Первый компонент может отправлять обновления другому компоненту: HTML-код ниже:

<internal-functions-report [events]="eventsSubject.asObservable()"></internal-functions-report>

А другой компонент:

@Input() public events: Observable<ReportSettings>;

public constructor(
  private utils: Utils,
  private commonService: CommonService,
  private internalFunctionsService: InternalFunctionsService) {
}

public ngOnInit(): void {
  this.eventsSubscription = this.events.subscribe(this.reportSettingsChanged.bind(this));
}

Проблема:

TypeError: this.handler.handle is not a function
at MergeMapSubscriber.rxjs_operator_concatMap__WEBPACK_IMPORTED_MODULE_2__.concatMap.call [as project] (http://localhost:9876/_karma_webpack_/webpack:/node_modules/@angular/common/esm2015/http.js:1174:28)
at MergeMapSubscriber._tryNext (http://localhost:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm2015/operators/mergeMap.js:109:1)
at MergeMapSubscriber._next (http://localhost:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm2015/operators/mergeMap.js:99:1)
at MergeMapSubscriber.next (http://localhost:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm2015/Subscriber.js:83:1)
at ScalarObservable._subscribe (http://localhost:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm2015/observable/ScalarObservable.js:42:1)
at ScalarObservable._trySubscribe (http://localhost:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm2015/Observable.js:171:1)
at ScalarObservable.subscribe (http://localhost:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm2015/Observable.js:159:1)
at MergeMapOperator.call (http://localhost:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm2015/operators/mergeMap.js:78:1)
at Observable.subscribe (http://localhost:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm2015/Observable.js:156:1)

Это происходит, когда я пытаюсь вызвать ngOnInit внутри первого компонента.Однако, в случае, если я объявляю eventsSubject внутри ngOnInit, он работает правильно.Пример:

public ngOnInit(): void {
  this.eventsSubject = new Subject<ReportSettings>();
}

Может кто-нибудь сказать мне, в чем проблема?

...