Django单元测试; POST复选框,包含多个值

时间:2013-08-14 17:30:45

标签: django unit-testing post checkbox

我正在尝试在具有多个复选框的表单上运行单元测试,但无法弄清楚如何发送POST数据。我能找到的最相似的问题是here。但是,如何将该url编码的片段与其他表单数据一起嵌入POST?

如果我做这样的事情,我的测试错误就出来了,并且说类= request.POST.getlist('class_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)

1 个答案:

答案 0 :(得分:3)

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

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