Django ModelFormsetの検証/クリーンな部分を単体テストする最良の方法は何ですか?私のformsetはフォームの値に基づいていくつかのバリデーションを行うきれいなメソッドを持っています。私はそれに対して単体テストをしたいのです。総称化コードのようになります。ユニットテストdjango ModelFormsetクリーンメソッド
class AForm(ModelForm):
a = ChoiceField(choices=CHOICES)
b = FloatField()
def __init__(self, *args, **kwargs):
super(AForm, self).__init__(*args, **kwargs)
class Meta:
model = AModel
fields =['a', 'b']
class AFormset(BaseInlineFormSet):
def clean(self):
# Some logic to validate relationships between the forms
しかし、フォームのテスト中には重要ではありません。その後、form = AForm(formdata)
とデータに基づいて、その有効性やエラーを検証します。私はformsetのテストを書くのに問題があります。
私が試してみた:
formset = AFormset()
と引数とモック(例えば、クエリセット)の様々な組み合わせでmodelformset_factory
Formset = modelformset_factory(AModel, AForm, formset=AFormset, fields=('a', 'b'))
formset = Formset(formdata)
を使用。しかし、私は常に、モデルの外部キーまたは主キーに関連するエラーを取得します。一例:
Error Traceback (most recent call last):
File "/tests/test_forms.py", line 62, in test_validation formset = Formset(formdata)
File "lib/python2.7/site-packages/django/forms/models.py", line 853, in __init__
self.instance = self.fk.rel.to()
AttributeError: 'AFormset' object has no attribute 'fk'
私は何が欠けていますか?データの辞書でフォームセットをインスタンス化し、そのclean
メソッドを実行する簡単な方法はありますか?私はフォームが使用されているビューをテストすべきですか? (ビューで私はDjango Extra Viewsパッケージでフォームとフォームセットを使用しています)
*正確に*あなたはそのエラーを取得していますか?テストの完全なコードを示してください。 –
@DanielRosemanトレースバックを含めるように質問を更新しました。私はそれをどのようにテストしているかに基づいて異なるエラーを取得しますが、それらはすべて関連するモデルのdb機能に関連しています。関連するすべてのモデルのモックを設定せずにフォームセットをテストすることはできません – ComeAlongBort