获取描述调用的夹具和组件值 - 角度单元测试

时间:2018-05-18 07:38:54

标签: angular unit-testing jasmine karma-jasmine

我正在编写包含太多表单的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值?任何帮助将不胜感激。

提前致谢!!

1 个答案:

答案 0 :(得分:0)

不要将其放入describe函数中,而是创建一个将创建describe的函数:

export const componentTestFn = (
  formGroup: any, 
  fields: Fields[], 
  configurationOptions?, 
  componentTested?
) => () => {...});

并称之为:

componentTestFn(common.componentTestFn(component.formGroup, fields, undefined, 'Testing'));