以嵌套驱动模板形式测试子元素

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,然后使用它的一个实例。