Я пытаюсь протестировать дочерний компонент в Angular 8
Дочерний компонент зависит от его функций родительского компонента, и родительский компонент не должен знать о дочернем компоненте, это может быть один из нескольких различных типовдочерние компоненты
В дочернем компоненте я получаю ссылку на родительский компонент, вставляя его в конструктор следующим образом:
export class ChildComponent {
constructor(
@Inject(forwardRef(() => ParentComponent)) public parent: ParentComponent
) { }
}
Проблема в том, что когда я пытаюсь написать модульное тестирование для дочернего компонента, Карма выдает ошибку: No provider for ParentComponent
Я добавил ParentComponent
компонент в поставщиках, ошибка исчезла, однако она все еще не работает, например, вызов childComponent.parent.ngOnInit()
даст TypeError: Cannot read property 'ngOnInit' of undefined
Как заставить родительский компонент работать в тесте дочернего компонента?
import { ComponentFixture, TestBed } from '@angular/core/testing';
describe('Create Child Component', () => {
let component: ChildComponent;
let fixture: ComponentFixture<ChildComponent>;
let componentElement: HTMLElement;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
ParentComponent,
ChildComponent,
]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ChildComponent);
component = fixture.componentInstance;
componentElement = fixture.debugElement.nativeElement;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
expect(component.parent).toBeTruthy();
component.parent.ngOnInit();
});
});