2017-04-01 1 views
0

제어 폼 기능이 포함 된 별도의 formControle 파일 종속성을 사용하여 ReactiveFormsControle을 테스트하려고합니다. 나는 observable을 사용하여 폼 컨트롤을 넘겨주고 그 후에 메시지 에러를 반환 할 필요가있다. 그러나 내가이 오류가 있다는 것을 테스트하려고 시도했을 때 : TypeError : 정의되지 않은 'map'속성을 읽을 수 없음karma 테스트 : TypeError : 정의되지 않은 'map'속성을 읽을 수 없습니다.

아무쪼록 도와 주시겠습니까?

ngAfterViewInit(): void { 
// Watch for the blur event from any input element on the form. 
let controlBlurs: Observable<any>[] = this.formInputElements 
    .map((formControl: ElementRef) => Observable.fromEvent(formControl.nativeElement, 'blur')); 
// Merge the blur event observable with the valueChanges observable 
Observable.merge(this.signUpForm.valueChanges, ...controlBlurs).debounceTime(1000).subscribe(value => { 
    this.displayeErrorMessage = this.formValidator.processMessages(this.signUpForm); 
}); 

}

processMessage를 기능 :

이 내가 (프로세스 메시지) 양식 제어 함수를 호출 할 수있는 방법입니다 :

내 코드입니다

processMessages(container : FormGroup) : {[key : string]: string}{ 

let messages = {}; 

for(let controlKey in container.controls){ 
    if(container.controls.hasOwnProperty(controlKey)){ 
    let c = container.controls[controlKey]; 

    if(c instanceof FormGroup){ 
     let childMessages = this.processMessages(c); 
     Object.assign(messages, childMessages); 
    }else { 

     if(this.validationErrorMessages[controlKey]){ 
     messages[controlKey]=''; 
     if((c.dirty || c.touched) && c.errors){ 
      Object.keys(c.errors).map(messageKey =>{ 
      if(this.validationErrorMessages[controlKey][messageKey]){ 
       messages[controlKey] += this.validationErrorMessages[controlKey][messageKey] + ' ' 
      } 
      }) 
     } 
     } 
    } 
    } 
} 
return messages; 

}

* 에러 취급이 테스트 코드 *

beforeEach(() => { 
fixture = TestBed.createComponent(SignUpComponent); 
component = fixture.componentInstance; 
debugHelpblck = fixture.debugElement.queryAll(By.css('.help-block')); 
component.ngOnInit(); 
component.ngAfterViewInit(); // this handle the error 
fixture.detectChanges(); 

});

답변

-1

map() 전에 filter(Boolean)를 추가하거나 데이터 (더 조심;

되지 않음이 모든 코드입니다 경우 오류가 표시되는 위치를 확인하십시오

let controlBlurs: Observable<any>[] = this.formInputElements 
    .filter(Boolean) 
    .map(...) 

또는

Object.keys(c.errors).filter(Boolean).map(messageKey =>{...}) 

는 오류를 수정해야합니다 ...

+0

답장을 보내 주셔서 감사합니다, karma chow 이 메시지 :'TypeError : 'filter'of undefined'를 읽을 수 없습니다. 스펙 파일에서 Observable을 인식하지 못하는 것 같지만 어떻게 해결할 수 있는지, 스펙에서 관찰 가능을 선언 할 수 있는지 모르겠습니다. 파일. –

+0

'formInputElements' 배열 또는 관찰 가능합니까? – Sasxa

+0

formInputElement는 정의되어 있지 않으며 다음과 같이 선언됩니다. FormInputElements : ElementRef []; ' –

관련 문제