Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django中测试未选中的复选框?_Django_Unit Testing_Checkbox - Fatal编程技术网

如何在Django中测试未选中的复选框?

如何在Django中测试未选中的复选框?,django,unit-testing,checkbox,Django,Unit Testing,Checkbox,因此,我向用户显示了一个复选框,您可以在我的forms.py文件中看到: class AddFooToBarForm(forms.Form): to_original = forms.BooleanField(initial=True, error_messages={'required': "Oh n

因此,我向用户显示了一个复选框,您可以在我的
forms.py
文件中看到:

class AddFooToBarForm(forms.Form):
    to_original = forms.BooleanField(initial=True,
                                     error_messages={'required':
                                                         "Oh no! How do I fix?"})
    ...
def add_foo_to_bar(request, id):
    ...
    try:
        bar = Bar.objects.get(pk=id)

        if request.method == 'POST': # handle submitted data
            form = AddFooToBarForm(bar, request.POST)
            if form.is_valid(): # good, now create Foo and add to bar
                ...
                to_original = form.cleaned_data['to_original']
                print 'to original is {0}'.format(to_original) # for debugging
                if to_original:
                    # do A
                else:
                    # do B

                ...
class FooTest(TestCase):
    ...

    def test_submit_add_to_Bar(self):
        form_data = {
            ...
            'to_original': True,
        }
        response = self.client.post(reverse('add_foo_to_bar', args=(self.bar.id,)),
                                    form_data, follow=True)
        self.assertContains(...) # works

        ...

        form_data['to_original'] = None
        response = self.client.post(reverse('add_foo_to_bar', args=(self.bar.id,)),
                                    form_data, follow=True)
        print response # for debugging purposes
        self.assertContains(...) # doesn't work
根据用户是否选中该复选框,我会执行不同的操作,正如您在我的
views.py
文件中看到的:

class AddFooToBarForm(forms.Form):
    to_original = forms.BooleanField(initial=True,
                                     error_messages={'required':
                                                         "Oh no! How do I fix?"})
    ...
def add_foo_to_bar(request, id):
    ...
    try:
        bar = Bar.objects.get(pk=id)

        if request.method == 'POST': # handle submitted data
            form = AddFooToBarForm(bar, request.POST)
            if form.is_valid(): # good, now create Foo and add to bar
                ...
                to_original = form.cleaned_data['to_original']
                print 'to original is {0}'.format(to_original) # for debugging
                if to_original:
                    # do A
                else:
                    # do B

                ...
class FooTest(TestCase):
    ...

    def test_submit_add_to_Bar(self):
        form_data = {
            ...
            'to_original': True,
        }
        response = self.client.post(reverse('add_foo_to_bar', args=(self.bar.id,)),
                                    form_data, follow=True)
        self.assertContains(...) # works

        ...

        form_data['to_original'] = None
        response = self.client.post(reverse('add_foo_to_bar', args=(self.bar.id,)),
                                    form_data, follow=True)
        print response # for debugging purposes
        self.assertContains(...) # doesn't work
因此,我想测试我的站点是否确实执行了正确的操作,这取决于用户是否在我的
tests.py
文件中选中复选框:

class AddFooToBarForm(forms.Form):
    to_original = forms.BooleanField(initial=True,
                                     error_messages={'required':
                                                         "Oh no! How do I fix?"})
    ...
def add_foo_to_bar(request, id):
    ...
    try:
        bar = Bar.objects.get(pk=id)

        if request.method == 'POST': # handle submitted data
            form = AddFooToBarForm(bar, request.POST)
            if form.is_valid(): # good, now create Foo and add to bar
                ...
                to_original = form.cleaned_data['to_original']
                print 'to original is {0}'.format(to_original) # for debugging
                if to_original:
                    # do A
                else:
                    # do B

                ...
class FooTest(TestCase):
    ...

    def test_submit_add_to_Bar(self):
        form_data = {
            ...
            'to_original': True,
        }
        response = self.client.post(reverse('add_foo_to_bar', args=(self.bar.id,)),
                                    form_data, follow=True)
        self.assertContains(...) # works

        ...

        form_data['to_original'] = None
        response = self.client.post(reverse('add_foo_to_bar', args=(self.bar.id,)),
                                    form_data, follow=True)
        print response # for debugging purposes
        self.assertContains(...) # doesn't work
我试过了

  • del form_data['to_original']
    ——这会显示“哦,不!我该如何修复?”错误消息
  • form_data['to_original']=None
    ——在我的视图函数中,我得到了
    True
    ,因此完成了A而不是B
  • form_data['to_original']=False
    ——这会再次显示“噢,不!我该如何修复?”错误消息

那么,我应该如何测试没有选中Django中复选框的用户呢?(我使用的是最新版本1.4.3)

如果未选中复选框,则它不会以提交的形式出现。此外,当提交的值为
'on'

如果要使
BooleanField
可选,请在定义表单字段时将
required=False


.

啊,谢谢!我通过检查
to_original
是否是一个键来实现它