как шпионить за наблюдаемой переменной - PullRequest
0 голосов
/ 26 сентября 2018

Сгенерированный ng-cli тестовый пример should create не выполняется со следующей ошибкой:

Cannot read property 'length' of undefined.

Я отслеживаю строку, которая вызвала ошибку в моем HTMLУ меня есть

items.component.html

<div *ngIf="items$ | async as items">
   <input vaule="{{ items.colors.length }}" name="colors_count" /> Colors
</div>

Внутри моего компонента:

items.component.ts

import * as fromItems from '../state';  
export class ItemsComponent implements OnInit {
        items$: Observable<Item>;

        ngOnInit(): void {
          this.items$ = this.store.pipe(select(fromItems.getCurrentItem));
        }
    }

items.component.spec.ts

beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [ ItemModule, TestsModule ],
      providers: [
        ItemService,
        NgForm,
        ItemsEffects,
        provideMockActions(() => actions),
      ]
    })
    .compileComponents();
  }));

  const item = new Item();
  item.colors = [];

beforeEach(async(() => {
    const id = '001318e4-b6f2-47d9-8816-c50a7b545784';
    effects = TestBed.get(ItemsEffects);
    const action = new itemActions.Load(id);
    const completion = new itemActions.LoadSuccess(item);

    fixture = TestBed.createComponent(ItemsComponent);
    component = fixture.componentInstance;

    component.items$ = of(item);

    const service = fixture.debugElement.injector.get(ItemService);
    spyOn(service, 'getItem').and.callThrough();
    component.ngOnInit();

    fixture.detectChanges();
  }));

Я использую ngrx-store для установки переменной item$ внутри ngOnInit жизненного циклаhook.

Во время тестирования я пытаюсь установить пустой массив в item.colors для устранения вышеуказанной ошибки length, которая приводит к сбою spec.

Но, установите значениедля item.colors из тестирования перезаписывается хук жизненного цикла ngOnInit.

Итак, есть ли способ подсмотреть items$, чтобы дождаться загрузки значения и установки в тестовом костюме?

...