Мне нужно иметь вложенную форму, управляемую шаблоном, и я использовал это руководство для этого: Angular: вложенная форма, управляемая шаблоном
К сожалению, как говорится в первом комментарии к статье, когда я пытался протестировать свой компонент, я обнаружил эту ошибку:
Error: StaticInjectorError(DynamicTestModule)[ControlContainer -> NgForm]:
StaticInjectorError(Platform: core)[ControlContainer -> NgForm]:
NullInjectorError: No provider for NgForm!
Похоже, что, поскольку дочерний компонент должен использовать существующую ngForm из родительского, его нельзя протестировать на собственном.
Этот стекблиц показывает, что я пытаюсь сказать. AddressComponent является дочерним, а AppComponent — родительским.
Любая помощь будет оценена.





Поскольку для вашего AddressComponent требуется существующий NgForm, вам необходимо предоставить его как часть вашей тестовой настройки:
TestBed.configureTestingModule({
imports: [FormsModule],
declarations: [AppComponent, AddressComponent, HelloComponent],
providers: [
{ provide: NgForm, useValue: new NgForm([], []) }
]
});
Это устраняет ошибку, но я никогда не делал этого раньше. Я не могу комментировать последующие последствия этого. В долгосрочной перспективе вы можете реализовать свой собственный класс MockNgForm, а затем использовать его экземпляр.