Модульное тестирование реактивной формы - PullRequest
0 голосов
/ 16 июня 2020

Я новичок в тестировании, которое началось только вчера, и я в ловушке, так как не знаю, что и как в этом делать ... У меня есть реактивная форма:

 ngOnInit(): void {
    this.initAddNewTeamMemberForm();
}
    public initAddNewTeamMemberForm(data?: TeamMember): void {
        this.addNewTeamMemberForm = this.fb.group({
          name: this.getNameFormGroup(),
          email: [
            { value: null, disabled: this.data.isDisabled },
            [Validators.required, Utils.emptySpaceValidator(), Validators.email],
          ],
          createdBy: this.getCreatedByFormGroup(),
          role: this.getRoleFormGroup(),
          meta: this.getMetaFormGroup(),
        });

        if (data) {
          this.addNewTeamMemberForm.patchValue(data);
        }
      }

      public getNameFormGroup(): FormGroup {
        return this.fb.group({
          first: [null, [Validators.required, Utils.emptySpaceValidator()]],
          last: [null],
        });
      }

      public getCreatedByFormGroup(): FormGroup {
        return this.fb.group({
          id: [],
          name: [],
        });
      }

      public getRoleFormGroup(): FormGroup {
        return this.fb.group({
          id: [null, [Validators.required, Utils.emptySpaceValidator()]],
          name: [],
        });
      }

      public getMetaFormGroup(): FormGroup {
        return this.fb.group({
          profilePic: [],
          uniqueName: [],
        });
      }

Я хочу напишите для этого тестовые примеры:

const formBuilder: FormBuilder = new FormBuilder();

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        ReactiveFormsModule,
        RouterTestingModule,
        MaterialModule,
        SharedHomeModule,
        MatFormFieldModule,
        BrowserAnimationsModule,
        HttpClientModule,
      ],
      declarations: [AddTeamComponent],
      providers: [
        { provide: FormBuilder, useValue: formBuilder },
        { provide: FormGroup },
        { provide: MatDialogRef, useValue: dialogMock },
        { provide: MAT_DIALOG_DATA, useValue: {} },
        { provide: TeamService, useClass: TeamServiceMock },
        SharedService,
        CustomHttpService,
      ],
    }).compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(AddTeamComponent);
    component = fixture.debugElement.componentInstance;
  });

it('should initialize add team member form', () => {
    const formBuilder: FormBuilder = new FormBuilder();
    const formFroup = formBuilder.group({
      name: formBuilder.group({
        first: null,
        last: null,
      }),
      email: [
        null,
        [Validators.required, Utils.emptySpaceValidator(), Validators.email],
      ],
      createdBy: formBuilder.group({
        id: [],
        name: [],
      }),
      role: formBuilder.group({
        id: [null, [Validators.required, Utils.emptySpaceValidator()]],
        name: [],
      }),
      meta: formBuilder.group({
        profilePic: [],
        uniqueName: [],
      }),
    });

    component.initAddNewTeamMemberForm();

    expect(component.addNewTeamMemberForm.value).toEqual(formFroup.value);
  });

  it('should initialize name form', () => {
    formBuilder.group({
      first: null,
      last: null,
    });
    component.getNameFormGroup();
  });

  it('should initialize CreateBy form', () => {
    formBuilder.group({
      id: [],
      name: [],
    });
    component.getCreatedByFormGroup();
  });

  it('should initialize role form', () => {
    formBuilder.group({
      id: [null, [Validators.required, Utils.emptySpaceValidator()]],
      name: [],
    });
    component.getRoleFormGroup();
  });

  it('should initialize meta form', () => {
    formBuilder.group({
      profilePic: [],
      uniqueName: [],
    });
    component.getMetaFormGroup();
  });

  it('should set selected member role from dropdown to form control', () => {
    const form = component.addNewTeamMemberForm.controls['role'];
    form.patchValue({
      id: '5ece482e97a76536f460e738',
      name: 'test role 2',
    });
    expect(component.addNewTeamMemberForm.controls['role'].value).toEqual(form.value);
  });

  it('form invalid when empty', () => {
    expect(component.addNewTeamMemberForm.valid).toBeFalsy();
  });

Я получаю ошибку в .valid и .control, поскольку они не определены, может ли кто-нибудь помочь мне в этом, что я делаю неправильно? Я пробовал все ответы на переполнение стека и демонстрацию stackblitz, но здесь у меня ничего не работает

...