Django Webtest为Formset创建集成测试

时间:2018-10-19 05:42:16

标签: django django-forms django-testing formset webtest

我有一个带有表单集的页面,该页面由三个表单组成,每个表单都有一个带有预定义值的隐藏输入,以及每个表单的几个textarea。在前端,表单集是一个带有标签的单个<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或其他东西。

0 个答案:

没有答案