我正在尝试在具有多个复选框的表单上运行单元测试,但无法弄清楚如何发送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)
答案 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'),
})