什麼是單元測試的最好辦法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'
我在想什麼?有沒有一種更簡單的方法來實例化一個數據字典的formset並讓它運行它的方法clean
?我應該只測試表單用於的視圖嗎? (在使用Django Extra Views包的表單和表單集的視圖中)
哪裏*確切*你得到那個錯誤?請顯示測試的完整代碼。 –
@DanielRoseman我更新了問題以包含回溯。基於我如何測試它,我得到了不同的錯誤,但它們都與相關模型的數據庫功能有關。如果沒有爲所有相關模型設置模擬,是否無法測試formset? – ComeAlongBort