我正在编写包含太多表单的Web应用程序的单元测试。因此,对于代码优化,我正在创建一个将返回函数的常用函数。该函数测试所有提供的表单字段(ReactiveFroms方法)是否需要它们。
测试是否需要字段的函数。
common-function.spec.ts:
export const componentTestFn = (formGroup: any, fields: Fields[], configurationOptions?) => () => {
describe('On required fields', () => {
beforeEach(() => {
if (configurationOptions) {
TestBed.configureTestingModule(configurationOptions)
.compileComponents();
}
});
fields.forEach(element => {
describe(element.name, () => {
it('should be a required field', () => {
let control = formGroup.get(element.formControlName);
if (element.nestedControl) {
control = control.get(element.nestedControl);
}
control.patchValue('');
expect(control.hasError('required')).toBeTruthy();
control.patchValue('Test');
expect(control.hasError('required')).toBeFalsy();
});
});
});
});
}
我正在使用describe子句从主spec文件调用此函数。
main.component.spec.ts:
describe('Given a Physical Property Setup Component', () => {
let component: PhysicalPropertySetupComponent;
let fixture: ComponentFixture<PhysicalPropertySetupComponent>;
let fields: Fields[] = [
new Fields('','field1','',''),
new Fields('','field2','',''),
new Fields('','field3','',''),
new Fields('','field4','','')
];
beforeEach(() => {
TestBed.configureTestingModule({
....
});
fixture = TestBed.createComponent(PhysicalPropertySetupComponent);
component = fixture.componentInstance;
});
describe('Testing',common.componentTestFn(component.formGroup,fields));
});
但它给了我错误&#34; TypeError:无法读取属性&#39; formGroup&#39;未定义&#34;。
我认为这是因为我们只能在it
子句中使用组件和fixture值。但我没有使用它,因为我的componentTestFn
将取代它。类似地,当我在it
内调用此函数时,它可以正常工作。
任何人都可以告诉我如何在描述中获得formGroup
值?任何帮助将不胜感激。
提前致谢!!
答案 0 :(得分:0)
不要将其放入describe函数中,而是创建一个将创建describe的函数:
export const componentTestFn = (
formGroup: any,
fields: Fields[],
configurationOptions?,
componentTested?
) => () => {...});
并称之为:
componentTestFn(common.componentTestFn(component.formGroup, fields, undefined, 'Testing'));