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

时间:2019-05-09 13:42:19

标签: angular nested-forms

我需要嵌套的模板驱动表单,并且我使用了本指南来做到这一点: Angular: Nested template driven form

不幸的是,正如本文中的第一条评论所述,当我尝试测试组件时,我无法克服此错误:

Error: StaticInjectorError(DynamicTestModule)[ControlContainer -> NgForm]: 
  StaticInjectorError(Platform: core)[ControlContainer -> NgForm]: 
    NullInjectorError: No provider for NgForm!

似乎,由于子组件需要使用来自父组件的现有ngForm,因此无法单独进行测试。

stackblitz显示了我要说的话。 AddressComponent是子级,AppComponent是父级。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

由于您的AddressComponent需要一个现有的NgForm,因此您需要在测试设置中提供它:

TestBed.configureTestingModule({
   imports: [FormsModule],
   declarations: [AppComponent, AddressComponent, HelloComponent],
   providers: [
     { provide: NgForm, useValue: new NgForm([], []) }
   ]
});

这可以解决错误,但是我以前从未这样做过。我不能对此发表评论。从长远来看,您可能想要实现自己的MockNgForm类,然后使用该类的实例。