mock Наблюдаемая функция concatMap внутри модульного теста (Angular 5)
Редактировать: я понял, проблема в том, spyOn
сделает функцию, которую он шпионит, чтобы вернуться undefined
нужно позвонить and.callThough
в явном виде.
Я пытаюсь проверить мой компонент, который использует магазин ngrx. Я заглушаю свой магазин в этом модульном тесте так:
meetup-view.component.spec.ts
class ActivatedRouteStub {
private subject = new Subject();
push(value) {
this.subject.next(value);
}
get params() {
return this.subject.asObservable();
}
}
class StoreStub {
storeState = {
auth: Observable.of({}),
meetups: Observable.of([{key: '1'}])
};
select(value) {
return this.storeState[value];
}
dispatch() {
}
}
describe('MeetupCreateComponent', () => {
let component: MeetupCreateComponent;
let fixture: ComponentFixture<MeetupCreateComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [FormsModule],
declarations: [ MeetupCreateComponent ],
providers: [
{ provide: ActivatedRoute, useClass: ActivatedRouteStub },
{ provide: Store, useClass: StoreStub }
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MeetupCreateComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should init edit/view mode correctly', () => {
const route: ActivatedRouteStub = TestBed.get(ActivatedRoute);
const store: StoreStub = TestBed.get(Store);
const spy = spyOn(store, 'select').and.callThrough();
route.push({id: 1});
expect(spy).toHaveBeenCalled();
expect(component.editMode).toBe(true);
});
});
проблема в том, что в моем компоненте я использую concatMap (и импортирую его, используя import 'rxjs/add/operator/concatMap';
)
meetup-view.component.ts
this.meetup$ = this.store.select('meetups')
.concatMap(meetups => {
return meetups.filter(m => m.key === key);
});
и когда я запускаю свой модульный тест, я всегда получаю эту ошибку: Cannot read property 'concatMap' of undefined
, Я уже пытался импортировать concatMap
на мои юнит-тесты, но не повезло. Искал часы сейчас:(.