Сгенерированный 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$
, чтобы дождаться загрузки значения и установки в тестовом костюме?