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

标签 django unit-testing post checkbox

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

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

    request = HttpRequest()
    request.method = 'POST'
    request.POST['fname'] = 'A'
    request.POST['lname'] = 'Student'
    request.POST['email'] = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e28f87a28c838f87cc818d8f" rel="noreferrer noopener nofollow">[email protected]</a>'
    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'] 上收到错误 类型错误:字符串索引必须是整数,而不是 str

    request.POST = urllib.urlencode({
            'class_choices': ['1', '2'],
            'fname': 'A',
            'lname': 'Student',
            'email': '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1f727a5f717e727a317c7072" rel="noreferrer noopener nofollow">[email protected]</a>',
            'passwd': 'password',
            'conpasswd': 'password'
    }, True)
    response = success(request)

最佳答案

因此,在尝试了其他一些方法之后,我基本上会说“从技术上讲”我的问题没有答案...我找不到任何方法来使用 HttpRequest 创建复选框类型的 POST 参数。然而,按照 Hieu Nguyen 的建议,使用 Django 测试客户端以“正确”的方式执行此操作确实可以实现该功能。您只需将多个选项封装在括号中,如下所示:

    response = c.post('/success/',{
        'fname': 'A',
        'lname': 'Student',
        'email': '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="660b032608070b034805090b" rel="noreferrer noopener nofollow">[email protected]</a>',
        'passwd': 'password',
        'conpasswd': 'password',
        'class_choices': ('1','2'),
    })

关于Django 单元测试;具有多个值的 POST 复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18238422/

相关文章:

java - Java 中的 Mockito 'Misplaced argument detected here'

angularjs - 在 karma/ Jasmine 测试中模拟 angular.service/ promise

python - 无法将 django 更新到最新版本

html - 链接到 Django HTML 模板中的 CSS 文件

multithreading - 我应该如何对多线程代码进行单元测试?

javascript - 有人可以就我的 Axios Post 请求提供建议吗?

javascript - 如何将原始数据主体添加到 axios 请求?

Jquery ajax 将文本发送到 txt

python - 在 Django Admin 中显示组成员

jquery - 如何在返回的 AJAX 调用上使用 Django 模板标签?