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 на мои юнит-тесты, но не повезло. Искал часы сейчас:(.

0 ответов

Другие вопросы по тегам