Angular Test'订阅不是函数'
在我的组件中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
无论如何都会出现错误,为什么它不起作用? 我真的很感谢任何帮助!
In my component inside ngOnInit
I have a subscribe()
inside which I call a component function:
ngOnInit(): void {
this.navigationService.itemReset$.subscribe(event => this.resetItem(event));
}
in the navigationService I have:
btnPressed$: Subject<Event> = new Subject();
itemReset$: Observable<Event> = this.btnPressed$.asObservable();
keyDown(event: Event): void {
this.btnPressed$.next(event);
}
I searched a lot about this issue, and tried something like this in my component test:
describe('MyComponent', () => {
let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;
let navigationServiceMock = {
itemReset$: () => of({} as Event),
// tried this: itemReset$: jasmine.createSpy('itemReset
but still, get the error
TypeError: this.navigationService.itemReset$.subscribe is not a function
Any idea, why it doesn't work?
I would be really grateful for any help!
but still, get the error
Any idea, why it doesn't work?
I would be really grateful for any help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您很接近,但请记住您在嘲笑:
您有一个模拟的称为ItemReset $的函数,该功能返回可观察到的功能。
实际上,您希望ItemReset $ to 成为可观察到的。
因此,将您的模拟更改为:
You are close but remember you are mocking:
You have a mocked a function called itemReset$ which returns an observable.
In reality, you want itemReset$ to be the observable.
So change your mock to:
确保假对象中
itemReset $
的类型与实现中的类型匹配。您需要传递
可观察到的事件&gt;
,但是您拥有一个函数,而返回了可观察到的函数。Ensure that the type of
itemReset$
in your fake object matches the type in the implementation.You need to pass a
Observable<Event>
but you had a function returning such an observable instead.