En mi componente dentro ngOnInit tengo un subscribe() dentro del cual llamo a una función de componente:
ngOnInit(): void { this.navigationService.itemReset$.subscribe(event => this.resetItem(event)); }en el servicio de navegación tengo:
btnPressed$: Subject<Event> = new Subject(); itemReset$: Observable<Event> = this.btnPressed$.asObservable(); keyDown(event: Event): void { this.btnPressed$.next(event); }Busqué mucho sobre este problema e intenté algo como esto en mi prueba de componentes:
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(); }); });pero aún así, obtener el error
TypeError: this.navigationService.itemReset$.subscribe is not a function¿Alguna idea, por qué no funciona? Estaría muy agradecido por cualquier ayuda!
Asegúrese de que el tipo de itemReset$ en su objeto falso coincida con el tipo en la implementación.
Debe pasar un Observable<Event> pero tenía una función que devolvía tal observable en su lugar.
let navigationServiceMock = { itemReset$: of({} as Event), };Estás cerca pero recuerda que te estás burlando:
let navigationServiceMock = { itemReset$: () => of({} as Event), // tried this: itemReset$: jasmine.createSpy('itemReset$').and.returnValue(of({})), };Se ha burlado de una función llamada itemReset$ que devuelve un observable.
En realidad, desea que itemReset$ sea el observable.
Así que cambia tu simulacro a:
let navigationServiceMock = { itemReset$: of({} as Event), };