Angular 5 Karma-Jasmine意外行为

时间:2018-12-18 16:43:38

标签: jasmine angular5 karma-jasmine

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

谁能告诉我问题出在哪里?

0 个答案:

没有答案