Я запускаю приложение Angular 5 с настройкой теста по умолчанию (Jasmine + Karma).
Допустим, есть компонент с именем Parent, имеющий метод, выполняющий метод для дочернего компонента.
parent.component.ts
@Component({
selector: 'parent',
...
export class ParentComponent implements {
@ViewChild(ChildComponent) childComponent: ChildComponent;
executeChildComponentMethod() {
this.childComponent.methodToTest();
}
}
parent.component.spec.ts
import { ParentComponent } from './parent.component'
describe('ParentComponent' () => {
let component: ParentComponent;
let fixture: ComponentFixture<ParentComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ParentComponent],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ParentComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should trigger executeChildComponentMethod', () => {
component.executeChildComponentMethod()
});
});
Это приводит к тому, что тесты выдают ошибку, в которой говорится, что невозможно выполнить methodToTest с неопределенным значением, что означает, что дочерний компонент не был создан.
Пробовали подходы, такие как создание дочернего компонента внутри блока it, внедрение дочернего компонента в блок it и создание дочернего компонента из другого фиксатора (для дочернего компонента) в тестовом блоке, но безрезультатно.
Как мне заставить тест работать?