我正在尝试编写单元测试,并且在组件内部声明的字段之一有问题。我有组件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>();
}
谁能告诉我问题出在哪里?