繁体   English   中英

角度测试'订阅不是功能'

[英]Angular test 'subscribe is not a function'

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

ngOnInit(): void {
    this.navigationService.itemReset$.subscribe(event => this.resetItem(event));
}

在 navigationService 我有:

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

keyDown(event: Event): void {
  this.btnPressed$.next(event);
}

我搜索了很多关于这个问题,并在我的组件测试中尝试了这样的事情:

 describe('MyComponent', () => { let component: MyComponent; let fixture: ComponentFixture<MyComponent>; let navigationServiceMock = { itemReset$: () => of({} as Event), // tried this: itemReset$: jasmine.createSpy('itemReset$').and.returnValue(of({})), }; beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [MyComponent], providers: [{ provide: navigationService, useValue: navigationServiceMock }] }) .compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(MyComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); });

但仍然得到错误

TypeError: this.navigationService.itemReset$.subscribe is not a function

任何想法,为什么它不起作用? 如果有任何帮助,我将不胜感激!

确保您的假对象中的itemReset$类型与实现中的类型相匹配。

你需要传递一个Observable<Event>但你有一个函数返回这样一个 observable 。

let navigationServiceMock = {
    itemReset$: of({} as Event),
};

你很亲密,但请记住你在嘲笑:

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

你有一个模拟了一个名为 itemReset$ 的函数,它返回一个 observable。

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

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

let navigationServiceMock = {
    itemReset$: of({} as Event),
  };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM