角度测试“订阅不是函数”

Mar*_*ark 0 javascript jasmine rxjs angular

在我的组件内部,ngOnInit我有一个subscribe()内部调用组件函数:

ngOnInit(): void {
    this.navigationService.itemReset$.subscribe(event => this.resetItem(event));
}
Run Code Online (Sandbox Code Playgroud)

在导航服务中我有:

btnPressed$: Subject<Event> = new Subject();
itemReset$: Observable<Event> = this.btnPressed$.asObservable();

keyDown(event: Event): void {
  this.btnPressed$.next(event);
}
Run Code Online (Sandbox Code Playgroud)

我搜索了很多关于这个问题的信息,并在我的组件测试中尝试了类似的方法:

ngOnInit(): void {
    this.navigationService.itemReset$.subscribe(event => this.resetItem(event));
}
Run Code Online (Sandbox Code Playgroud)

但仍然出现错误

TypeError: this.navigationService.itemReset$.subscribe is not a function
Run Code Online (Sandbox Code Playgroud)

知道吗,为什么它不起作用?我将非常感谢任何帮助!

小智 5

你很接近,但请记住你在嘲笑:

let navigationServiceMock = {
    itemReset$: () => of({} as Event),
    // tried this: itemReset$: jasmine.createSpy('itemReset$').and.returnValue(of({})),
  };
Run Code Online (Sandbox Code Playgroud)

您有一个名为 itemReset$ 的模拟函数,它返回一个可观察值。

实际上,您希望 itemReset$ 成为观察的。

因此,将您的模拟更改为:

let navigationServiceMock = {
    itemReset$: of({} as Event),
  };
Run Code Online (Sandbox Code Playgroud)