以嵌套驱动模板形式测试子元素
Testing child element in nested driven template form
我需要嵌套模板驱动的表单,我使用本指南来完成它:
Angular: Nested template driven form
不幸的是,正如文章中的第一条评论所说,当我尝试测试我的组件时,我发现了这个错误:
Error: StaticInjectorError(DynamicTestModule)[ControlContainer -> NgForm]:
StaticInjectorError(Platform: core)[ControlContainer -> NgForm]:
NullInjectorError: No provider for NgForm!
看来,由于子组件需要使用现有的 ngForm 来自 is parent 因此无法在 is own 上进行测试。
这个 stackblitz 显示了我想说的。 AddressComponent 是子组件,AppComponent 是父组件。
任何帮助将不胜感激。
由于您的 AddressComponent
需要现有的 NgForm,因此您需要将其作为测试设置的一部分提供:
TestBed.configureTestingModule({
imports: [FormsModule],
declarations: [AppComponent, AddressComponent, HelloComponent],
providers: [
{ provide: NgForm, useValue: new NgForm([], []) }
]
});
这解决了错误,但我以前从未这样做过。我不能就此的下游影响发表评论。 Long-term,您可能想要实现自己的 MockNgForm
class,然后使用它的一个实例。
我需要嵌套模板驱动的表单,我使用本指南来完成它: Angular: Nested template driven form
不幸的是,正如文章中的第一条评论所说,当我尝试测试我的组件时,我发现了这个错误:
Error: StaticInjectorError(DynamicTestModule)[ControlContainer -> NgForm]:
StaticInjectorError(Platform: core)[ControlContainer -> NgForm]:
NullInjectorError: No provider for NgForm!
看来,由于子组件需要使用现有的 ngForm 来自 is parent 因此无法在 is own 上进行测试。
这个 stackblitz 显示了我想说的。 AddressComponent 是子组件,AppComponent 是父组件。
任何帮助将不胜感激。
由于您的 AddressComponent
需要现有的 NgForm,因此您需要将其作为测试设置的一部分提供:
TestBed.configureTestingModule({
imports: [FormsModule],
declarations: [AppComponent, AddressComponent, HelloComponent],
providers: [
{ provide: NgForm, useValue: new NgForm([], []) }
]
});
这解决了错误,但我以前从未这样做过。我不能就此的下游影响发表评论。 Long-term,您可能想要实现自己的 MockNgForm
class,然后使用它的一个实例。