أنجولار - اختبار FormArray
لدي PhoneNumbersFormComponent الذي تبدو قوالبه كالتالي :
<div [formGroup]="form">
<div formArrayName="numbers">
<input formControlName="countryPrefix">
<input formControlName="number">
</div>
</div>
أريد اجتياز الاختبار الافتراضي الذي تم إنشاؤه بواسطة ng g component xxx من angular-cli
كان أول خطأ حصلت عليه:
تعذر العثور على عنصر تحكم بالاسم 'countryPrefix'
الذي حَلَّلته بـ:
beforeEach(() => {
fixture = TestBed.createComponent(PhoneNumbersFormComponent);
component = fixture.componentInstance;
component.phoneNumbers = [];
component.form = new FormGroup({
countryPrefix: new FormControl(),
number: new FormControl()
});
fixture.detectChanges();
});
الآن الخطأ الأخير المتبقي هو:
لا يمكن العثور على عنصر تحكم بالاسم 'numbers'
ولا فكرة لدي عن كيفية اختبار formArrayName="numbers"
الإجابة رقم 1
جرب شيئًا مثل هذا:
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
})
الإجابة رقم 2
بدلاً من ذلك، يمكنك إنشاء FormArray في المكون الخاص بك وتوفير دالة getter لمصفوفة النموذج.
ngOnInit() { this.formArrayOfPhoneNumbers = this.phoneNumbers.map((phone) =>
{ return new FormGroup({ countryPrefix: [phone.countryPrefix], number: [phone.number] })
}
get numbers: FormArray { return this.formArrayOfPhoneNumbers as FormArray }
لست متأكدًا من الصياغة على الأرجح، لكن النقطة هي أن توجيه formArrayName سيستدعي getter ويمكنك التأكد من أن كائن FormArray قد تم إرجاعه.
