У меня есть страница с набором форм, который состоит из трех форм, каждая из которых имеет скрытый ввод с предопределенным значением, и несколько textarea
с для каждой формы.На переднем конце formset находится один тег <form>
с вкладками внутри.Я могу успешно получать данные из каждой формы в наборе форм и публиковать их на сервере.Проблема в том, что мне нужно написать интеграционный тест, где я мог бы посетить страницу, заполнить форму и отправить ее, чтобы позже проверить, что form.cleaned_data
имеет правильные и необходимые значения.Вот мои шаблоны
edit.html
<form action="{% url 'my_model/edit', my_model.pk" id="my_formset", method="post">
{% csrf_token %}
{% for form in formset %}
{# here we render hidden inputs #}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{# and here go the visible ones #}
{% for field in form.visible_fields %}
<div class="form-field-wrapper">
{% render_field field required=False disabled=read_only %}
</div>
{% endfor %}
{% endfor %}
</form>
А вот и поле, которое отображается с render_field
:
textarea.html
<div class="form-field">
<label for="field.id_for_label">{{ field.label }}</label>
<textarea
id="{{ field.id_for_label }}"
name="{{ field.html_name }}"> {{ field.value|default:"" }}</textarea>
</div>
Это моя форма и набор форм:
forms.py
from django import forms
from django.conf import settings
class MyModelForm(forms.Form):
language = forms.ChoiceField(
choices=settings.LANGUAGES,
required=True,
widget=forms.widget.HiddenInput()
)
field_one = forms.CharField(
label='Field One',
required=False,
widget=forms.widget.TextArea()
)
field_two = forms.CharField(
label='Field Two',
required=False,
widget=forms.widget.TextArea()
)
# initializing formset
MyModelFormset = forms.formset_factory(MyModelForm, extra=0)
Так что это на самом делеЭто.Форма работает, как запланировано, и все в порядке, единственное, что я хотел бы получить, - это показать хотя бы общее направление, как я мог бы протестировать этот набор форм с помощью WebTest, фактически заполнив его и отправив, примерно так:
class MyModelFormsetTestCase(WebTest):
# setUp omitted
def test_correct_formset_submission(self):
my_model = MyModelFactory()
formset = self.app.get('/my_model/{}/edit/'.format(my_model.pk)).forms['my_formset']
# and here goes the rest of test
Буду очень признателен за любые идеи:)
PS : мне нужно протестировать этот набор форм, так как он уже отображается в HTML, а не сам класс FormSet, поскольку из-за render_field
было несколько неприятных ошибок, и данные не сохранялись правильно, но это уже исправлено.Я надеюсь, что есть какой-то способ сделать это, используя только WebTest, без Selenium или чего-то подобного.