【发布时间】:2018-08-16 04:11:08
【问题描述】:
所以我有一个类似这样的子组件
export class ChildComponent implements OnInit {
@Input('parentForm')
public parentForm: FormGroup;
constructor(private fb: FormBuilder, private cd: ChangeDetectorRef) { }
ngOnInit() {
this.parentForm.addControl('newControl', <Some Control>);
}
}
接下来我有一个像这样的准系统单元测试文件
describe('ChildComponent', () => {
let component: ChildComponent;
let fixture: ComponentFixture<ChildComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ReactiveFormsModule, FormsModule],
declarations: [ ChildComponent ],
providers: [ FormBuilder, FormGroup ]
})
.compileComponents();
}));
beforeEach(inject([FormBuilder], (fb: FormBuilder) => {
fixture = TestBed.createComponent(ChildComponent);
component = fixture.componentInstance;
component.parentForm = fb.group({});
component.ngOnInit();
fixture.detectChanges();
}));
fit('should be created', () => {
expect(component).toBeTruthy();
});
});
以前我遇到了一个未定义 parentForm 的问题,所以我尝试通过在 beforeEach 中注入 FormBuilder 来自己构建它,方法是这样做 component.parentForm = fb.group({});。但是现在的问题是 karma/jasmine 找不到 FormBuilder
Cannot find name 'FormBuilder'.
我要做的就是在单元测试期间创建组件实例时尝试获取或模拟 parentForm,我需要它,因为我在 for each 期间调用 ngOnInit,因为它是一个新控件.
任何想法。谢谢
【问题讨论】:
-
你能解决这个问题吗?我的情况也一样。但我收到“无法解析 FormGroup 的所有参数:(?, ?, ?)”错误。
-
我注意到您的代码中有错字:
inject([FormBuidler], (fb: FormBuilder)应该是:inject([FormBuilder], (fb: FormBuilder)
标签: unit-testing karma-jasmine angular-reactive-forms formbuilder angular4-forms