Насмешка django Форма поля cleaned_data - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть простая форма 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, если он вообще не существует?

1 Ответ

0 голосов
/ 16 февраля 2020

Вы можете смоделировать весь класс формы вместо одного метода:

@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

Где myapp.views необходимо заменить точечным путем к модулю views вашего приложения. Предполагается, что вы импортируете ContactForm в этот модуль, например, с from .forms import ContactForm.

...