2017-09-18 2 views
1

폼을 수신하고 컨트롤을 더티라고 표시하는 함수가 있습니다.각도 4로 컨트롤을 사용하여 위조 된 양식을 만드는 방법은 무엇입니까?

단위 테스트에서 대체품으로 사용할 위조 된 양식의 인스턴스를 수동으로 만드는 방법을 알 수 없습니다.

markControlDirty(form: NgForm) { 
    let firstControl = form.controls[Object.keys(form.controls)[0]]; 
    firstControl.markAsDirty(); 
} 

는이 사이트에 다른 답변에서 다음 코드를 시도하지만 모든 컨트롤을 포함하지 않기 때문에 내 코드 form.controls 이후 Object.keys(form.controls) 실패는 정의되지 않는다 :

let fakeForm = <NgForm> { 
    value: { 
    name: 'Hello', 
    category: 'World' 
    } 
}; 

답변

0

당신은 사용할 수 있습니다 FormBuilder을 사용하여 원하는 모든 개체에서 더미 양식 그룹을 만듭니다.

일부 동작을 조롱해야하는 경우 jasmine은 spyOnProperty 메서드를 제공하여 값/컨트롤 또는 다른 readOnly 속성의 반환을 조롱 할 수 있습니다 (이는 양식 처리시 매우 유용합니다).

const myModel = { 
    name: 'Hello', 
    category: 'World' 
}; 
const fb = new FormBuilder(); 
const form = fb.group(myModel); 

그리고 당신은 spyOnProperty 덕분에 원하는 모든 것을 감시 할 수 있습니다 : 내 더미 양식을 만들 것입니다 방법

https://jasmine.github.io/api/edge/global.html#spyOnProperty

. 예를 들어

:

spyOnProperty(form, 'valid', 'get').and.returnValue(false); 
+0

답변 주셔서 감사하지만 해결책은 내가 필요로하는 무슨 인 나에게 NgForm 객체를 제공하지 않습니다. FormGroup 객체를 만듭니다. – Stewart

관련 문제