angular - FormArray Test Etme
Bir PhoneNumbersFormComponent'im var ve şablonu şöyle görünüyor :
<div [formGroup]="form">
<div formArrayName="numbers">
<input formControlName="countryPrefix">
<input formControlName="number">
</div>
</div>
Angular-cli'nin ng g component xxx ile oluşturduğu varsayılan testi geçmek istiyorum
Aldığım ilk hata şuydu:
'countryPrefix' adlı kontrol bulunamıyor
Bunu şunla çözdüm:
beforeEach(() => {
fixture = TestBed.createComponent(PhoneNumbersFormComponent);
component = fixture.componentInstance;
component.phoneNumbers = [];
component.form = new FormGroup({
countryPrefix: new FormControl(),
number: new FormControl()
});
fixture.detectChanges();
});
Şimdi kalan son hata şunlardır:
'numbers' adlı denetim bulunamıyor
Ve formArrayName="numbers"'i nasıl test edeceğim hakkında hiçbir fikrim yok
Cevap #1
Böyle bir şey deneyin:
let array: FormGroup[] = [];
array.push(new FormGroup({
countryPrefix: new FormControl(),
number: new FormControl()
}));
let formArray = new FormArray(array);
component.form = new FormGroup({
numbers: formArray // or array not totally sure
})
Cevap #2
Alternatif olarak, bileşeninizde bir FormArray oluşturabilir ve form dizisi için bir getter sağlayabilirsiniz.
ngOnInit() { this.formArrayOfPhoneNumbers = this.phoneNumbers.map((phone) =>
{ return new FormGroup({ countryPrefix: [phone.countryPrefix], number: [phone.number] })
}
get numbers: FormArray { return this.formArrayOfPhoneNumbers as FormArray }
Sözdiziminde muhtemelen tam olarak doğru değilim, ama mesele şu ki, formArrayName yönergesi getter'ı çağıracak ve bir FormArray nesnesinin döndüğünden emin olabilirsiniz.
