Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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单元测试;带有多个值的POST复选框_Django_Unit Testing_Post_Checkbox - Fatal编程技术网

Django单元测试;带有多个值的POST复选框

Django单元测试;带有多个值的POST复选框,django,unit-testing,post,checkbox,Django,Unit Testing,Post,Checkbox,我试图在一个带有多个复选框的表单上运行单元测试,但无法确定如何发送POST数据。我能找到的最相似的问题是。但是我如何将url编码的片段与其他表单数据一起嵌入到帖子中呢 如果我这样做,我的测试就会出错,并显示classes=request.POST.getlist('class\u choices') AttributeError:“dict”对象没有属性“getlist”: request = HttpRequest() request.method = 'POST' r

我试图在一个带有多个复选框的表单上运行单元测试,但无法确定如何发送POST数据。我能找到的最相似的问题是。但是我如何将url编码的片段与其他表单数据一起嵌入到帖子中呢

如果我这样做,我的测试就会出错,并显示classes=request.POST.getlist('class\u choices') AttributeError:“dict”对象没有属性“getlist”:

    request = HttpRequest()
    request.method = 'POST'
    request.POST['fname'] = 'A'
    request.POST['lname'] = 'Student'
    request.POST['email'] = 'me@name.com'
    request.POST['class_choices'] = urllib.urlencode({
            'class_choices': ['1', '2'],
    }, True)
    request.POST['passwd'] = 'password'
    request.POST['conpasswd'] = 'password'
    response = success(request)
    self.assertIn('My Browser', response.content.decode())
但是如果我这样做,我会在fname=request.POST['fname']上得到一个错误 TypeError:字符串索引必须是整数,而不是str

    request.POST = urllib.urlencode({
            'class_choices': ['1', '2'],
            'fname': 'A',
            'lname': 'Student',
            'email': 'me@name.com',
            'passwd': 'password',
            'conpasswd': 'password'
    }, True)
    response = success(request)

所以,在尝试了其他一些事情之后,我基本上要说,我的问题在“技术上”没有答案……我找不到任何方法使用HttpRequest创建复选框类型的POST参数。然而,按照Hieu Nguyen的建议,使用Django测试客户机以“正确”的方式进行测试确实允许这种能力。您只需将多个选项封装在Paranthesis中,如下所示:

    response = c.post('/success/',{
        'fname': 'A',
        'lname': 'Student',
        'email': 'me@name.com',
        'passwd': 'password',
        'conpasswd': 'password',
        'class_choices': ('1','2'),
    })

为什么不使用普通的Django测试客户端?啊,谢谢!我遵循了这个[(Selenium/Django教程),它使用了不同的方法。您的方法似乎有效(我得到了一个不同的错误,这是一个进步),所以我很乐意接受…谢谢!之前在Pyramid中我使用了WebOb的MultiDict…但这更简单,而且似乎是一个很好的测试。谢谢!