как мне макет взять - PullRequest
       17

как мне макет взять

0 голосов
/ 14 февраля 2019

Я использую Angular 7, ngrx 7 и rxjs 6.3.3.

Как сделать макет takeWhile, используя MockStore, который я покажу ниже?Я называю ngOnDestroy в тесте, и поток не «отписался».

Используя ngrx и т. Д., У меня есть такая функция:

this.store
  .pipe(
    select(employeeSelectors.showMailingAddress),
    takeWhile(() => this.componentActive)
  )
  .subscribe(showMailingAddress => {
    this.showMailingAddress = showMailingAddress;
  });

Я использую MockStore следующим образом:

import { Subject, Observable, BehaviorSubject, of } from 'rxjs';

interface SelectorMap {
  [key: string]: Function;
}

interface SubjectMap {
  [key: string]: Subject<any>;
}

const mockedValueShowMailingAddress = true;

const storeSubjectMock = new 
BehaviorSubject(mockedValueShowMailingAddress);

export class MockStore {
  public selectStreams: SubjectMap = {};

  constructor(private selectors: SelectorMap) {}

  public pipe() {
    return storeSubjectMock.asObservable();
  }

  public reset() {
    Object.values(this.selectStreams).map(subject => 
subject.complete());
    this.selectStreams = {};
    this.selectors = {};
  }

  public dispatch(obj) {}

  public select(selector): Observable<any> {
    const selectKey = getKeyByValue(this.selectors, selector);
    if (!this.selectStreams[selectKey]) {
      this.selectStreams[selectKey] = new Subject();
    }
    return this.selectStreams[selectKey];
  }
}

function getKeyByValue(object, value) {
  return Object.keys(object).find(key => object[key] === value);
}

И мой ngOnDestroy такой:

ngOnDestroy() {
    this.componentActive = false;
}
...