在我的內部組件中,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
任何想法,為什么它不起作用?如果有任何幫助,我將不勝感激!
uj5u.com熱心網友回復:
確保itemReset$您的假物件中的型別與實作中的型別相匹配。
你需要傳遞 aObservable<Event>但你有一個函式回傳這樣一個 observable 。
let navigationServiceMock = {
itemReset$: of({} as Event),
};
uj5u.com熱心網友回復:
你很親密,但請記住你在嘲笑:
let navigationServiceMock = {
itemReset$: () => of({} as Event),
// tried this: itemReset$: jasmine.createSpy('itemReset$').and.returnValue(of({})),
};
你有一個模擬了一個名為 itemReset$ 的函式,它回傳一個 observable。
實際上,您希望 itemReset$成為可觀察的。
因此,將您的模擬更改為:
let navigationServiceMock = {
itemReset$: of({} as Event),
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/488163.html
標籤:javascript 有角度的 rxjs 茉莉花
下一篇:Discord.jsv13錯誤:RangeError[EMBED_FIELD_VALUE]:MessageEmbed欄位值必須是非空字串
