[英]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.