Да, вам придется использовать spyOnProperty
, поскольку это свойство, за которым вы пытаетесь шпионить.Но даже если это не свойство, ваш шпион не возвращает ожидаемый тип, чтобы он работал.Возвращаемое значение вашего шпиона - просто обычный объект { type: 'somevalue' }
, но свойство events
ожидает значение типа Observable<any>
.Это, скорее всего, приведет к ошибке, так как компонент пытается вызвать subscribe
для свойства events
, но обычный объект не предоставляет этот метод.
Для этого теста я просто предоставил бымакет Observable
и проверьте, было ли полученное значение успешно получено в вашем компоненте (я предполагаю, что вы присваиваете то, что получаете от Observable, какому-либо свойству в компоненте).
Это может выглядеть примерно такэто:
beforeEach(() => {
fixture = TestBed.createComponent(DummyComponent);
component = fixture.componentInstance;
});
it('should test the component', () => {
// provide an Observable with whatever value you need in your component
component.events = of({type: 'somevalue'});
// nothing happened yet
expect(component.eventsSubscription).toBeFalsy();
expect(component.valueReceived).toBeUndefined();
// this should trigger change detection and your ngOnInit
fixture.detectChanges();
// verify whatever you need
expect(component.eventsSubscription).toBeTruthy();
expect(component.valueReceived).toEqual({type: 'somevalue'});
});
А в вашем компоненте:
@Input() events: Observable<any>;
eventsSubscription: any;
valueReceived: any;
ngOnInit() {
this.eventsSubscription = this.events.subscribe((event) => {
this.valueReceived = event;
console.log("The test doesn't get past here!!!!");
});
}