Django单元测试;带有多个值的POST复选框
我试图在一个带有多个复选框的表单上运行单元测试,但无法确定如何发送POST数据。我能找到的最相似的问题是。但是我如何将url编码的片段与其他表单数据一起嵌入到帖子中呢 如果我这样做,我的测试就会出错,并显示classes=request.POST.getlist('class\u choices') AttributeError:“dict”对象没有属性“getlist”: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
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…但这更简单,而且似乎是一个很好的测试。谢谢!