2017-09-18 6 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を使用して、任意のオブジェクトからダミーフォームグループを作成します。

次に、動作を模擬する必要がある場合、ジャスミンは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

関連する問題