javascript - Angular Jasmine 这个服务方法不是一个函数
我正在尝试在单元测试中传递一个服务方法,但它一直失败:
"TypeError: this.eventsService.getEvent 不是一个函数"
我组件里面的代码:
constructor(
private eventsService: EventsService
)
this.subscriptions.add(
this.eventsService.getEvent().subscribe(events => {
this.events = events;
this.soSomeMethod();
})
);
// Also have a V2 method, unsure if it matters but adding it for clarity
this.subscriptions.add(
this.eventsService.getEventV2().subscribe(eventsV2 => {
this.eventsV2 = eventsV2;
this.soSomeMethod();
})
);
这是所讨论的服务:
public getEvent(): Observable<event[]> {
return combineLatest(this.store.select(getEventStore), this.store.select(getEvents)).pipe(
map(state => {
// do something
})
);
}
public getEventV2(): Observable<event[]> {
return combineLatest(this.store.select(getEventStore), this.store.select(getEvents)).pipe(
map(state => {
// do something
})
);
}
我的测试在提供者内部有这些方法:
{ provide: EventsService, useValue: { getEvent: () => of([])}},
{ provide: EventsService, useValue: { getEventV2: () => of([])}},
答案#1
问题是 Angular 使用了你为 EventsService 提供的最后一个 provider。
要解决它,请这样做:
{ provide: EventsService, useValue: { getEvent: () => of([]), getEventV2: () => of([]) } },
// remove the two instances of EventsService and keep it to one.
