Django Webtest создает тест интеграции для formset - PullRequest
0 голосов
/ 19 октября 2018

У меня есть страница с набором форм, который состоит из трех форм, каждая из которых имеет скрытый ввод с предопределенным значением, и несколько 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 или чего-то подобного.

...