如何测试Django Form ChoiceField

2024-04-20 01:56:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试在Django中测试一个表单ChoiceField。在

我有一个Form和一个ChoiceField

class PickPlanForm(forms.Form):
    "Set the `plan` session cookie for choice here."

    plan_choices = Plan.objects.get_choices()

    # Field
    plan = forms.ChoiceField(required=True, choices=plan_choices)

这是我的plan_choices的元组列表:

^{pr2}$

我试着用以下方法来测试它:

response = self.client.post(reverse('payment:register_step3'),
    {'plan': 'Bronze'}, follow=True)
self.assertRedirects(response, reverse('payment:register_step4'))

但是,在运行我的测试时,我总是得到错误回溯:

Traceback (most recent call last):
  File "/Users/aaron/Documents/djcode/textress_concierge/textress/main/tests/test_views.py", line 170, in test_register_step3
    self.assertRedirects(response, reverse('payment:register_step4'))
  File "/Users/aaron/Documents/virtualenvs/textress/lib/python3.4/site-packages/django/test/testcases.py", line 263, in assertRedirects
    (response.status_code, status_code))
AssertionError: False is not True : Response didn't redirect as expected: Response code was 200 (expected 302)

我正在使用:

Django 1.6.8
Python 3.4

我在想这是我错过的一件容易的事?在

谢谢你

编辑:添加视图

from django.views.generic import FormView
from braces.views import LoginRequiredMixin

class PickPlanView(LoginRequiredMixin, FormView):
    """
    Step #3 of Registration

    Pick a Plan, and save the Plan as a `session cookie` before creating
    the Stipe Customer/Subscription using the Plan Choice.
    """
    template_name = 'main/hotel_form.html'
    form_class = PickPlanForm
    success_url = reverse_lazy('payment:register_step4')
    authenticated_redirect_url = settings.VERIFY_LOGOUT_URL

    def get_form_kwargs(self):
        """Add the `request` Obj to Form, so I can set the PlanPick as a
            session cookie for the time being."""
        kwargs = super().get_form_kwargs()
        kwargs['request'] = self.request
        return kwargs

查看注释:

它只接受形式选择。在

当我手动测试它时,它能工作。在

我只是在使用Django ChoiceField Test部分时遇到了问题,因为我以前没有测试过ChoiceField。在

谢谢你


Tags: thedjangoselfformregisterresponsepaymentkwargs
1条回答
网友
1楼 · 发布于 2024-04-20 01:56:33

如果我发布了一个无效的选择,我也可以用同样的方式让测试失败。PostingBronze通过了测试,但是我在form类中硬编码了选择,并且没有从数据库动态获取它们。在

让我想如果计划存在于单元测试的数据库中(或者在模拟的queryset)中,以便从Plan.objects.get_choices()中正确地获取它们?在

相关问题 更多 >