Как я могу получить ссылку на дочерний компонент и вывести значение из дочернего компонента - PullRequest
0 голосов
/ 07 октября 2019

У меня есть родительский компонент ValidateSessionComponent, у которого есть дочерний компонент LoginFormComponent. В моем модульном тесте я хочу выдать значение от LoginFormComponent, но я не могу понять, как я могу это сделать.

HTML-код ValidateSessionComponent содержит ссылку на LoginFormComponent.

<app-login-form #loginForm (formOutputEvent)="handleFormValues($event)" [userId]="username"></app-login-form>

Компонент LoginFormComponent выглядит следующим образом:

export class LoginFormComponent implements OnInit {

  loginForm:FormGroup;

  formData:LoginFormValues;
  @Input() userId;
  @Output() formOutputEvent: EventEmitter<LoginFormValues>;
  existingUser:UserSigninInfo;

..
}

В тесте я хочу выдать formOutputEvent, вызвав formOutputEvent.emit(formData); Но я не могу понять,как получить доступ к formOutputEvent из LoginFormComponent в спецификации ValidateSessionComponent.

  fit('should send signin request on receiving form values ',(done)=>{
    //let loginComponent:LoginFormComponent = TestBed.get(LoginFormComponent); //IF I UNCOMMENT THIS THEN I GET ERROR NO PROVIDER OF LOGINFORMCOMPONENT
    let userService:UserManagementService = TestBed.get(UserManagementService);
    component.loginForm.formOutputEvent.emit(new LoginFormValues('test@test.com','somepassword'));

    spyOn(userService,'signinUser');
    setTimeout(()=>{
      expect(userService.signinUser).toHaveBeenCalledWith(new UserSigninInfo('test@test.com','somepassword'));
      done();
    },1000);

  });

Я думал, что смогу использовать директиву ViewChild @ViewChild(loginForm) loginFormRef;, но я предполагаю, что получу ElementRef. Я не могу понять, как получить доступ к formOutputEvent.

...