0

我有一个像这样的简单 django 表单:

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea)

我的观点是这样使用它的:

def my_view(request):
  form = ContactForm(request.POST)
  if form.is_valid():
    data = form.cleaned_data

  ...

我想测试我的观点,而不关心表单的实际作用。这是我的测试到目前为止的样子

@patch.object(ContactForm, 'is_valid')
def test_my_view(mock_is_valid):
  is_valid.return_value = True

  ...
  assert response.status_code == 201

但是,这不起作用,因为form.cleaned_data直到form.is_valid()被调用才设置。form.cleaned_data如果属性一开始不存在,我该如何模拟它?

4

1 回答 1

2

您可以模拟整个表单类,而不仅仅是一种方法:

@patch('myapp.views.ContactForm')
def test_my_view(mock_form_class):
    mock_form_class.return_value.is_valid = True
    mock_form_class.return_value.cleaned_data = {}
    ...
    assert response.status_code == 201

Wheremyapp.views需要替换为应用views模块的虚线路径。它假定您正在将 导入ContactForm到该模块中,例如,使用from .forms import ContactForm.

于 2020-02-16T07:09:46.987 回答