python - 如何使用 request.post 执行 Django 测试?

标签 python django django-tests

我正在使用 Django 1.8 和 Python 3.5。

我有一个我想测试的 View 方法。我正在为 self.client.get 方法提供数据,但它无法验证表单。我做错了什么?

这是 View 方法:

def saveNewDriverInfo(request):
    if  request.user.is_authenticated():
        form = DriverForm(request.POST)  
        if  form.is_valid():
            new_Driver = form.save()
            carid = form.cleaned_data['carID']
            Car = get_object_or_404(Car, pk=carid)
            return redirect('carmanager:carDetails', carID=carid
        else:
            return HttpResponse("something went wong some where! yes i said wong!")

这是测试方法:

 def test_saveNewDriverInfo(self):
            self.client.login(username="testuser",password="testuser321")
response= self.client.get(reverse('carmanager:saveNewDriverInfo'),data={'form':{'carID':'1034567','Driver_Last_Name':'daddy','Driver_First_Name':'daddy','Driver_Middle_Initial':'K','entered_by':'king'}})
            #self.assertRedirects(response, expected_url, status_code, target_status_code, host, msg_prefix, fetch_redirect_response)
         
            self.assertNotContains(response, 'something went wrong' ,200)

另请注意,此测试之所以有效,是因为它获得了响应。但是被注释掉的那一行是我想用的。

但是,我似乎无法将信息提供给 DriverForm。任何帮助将不胜感激。

最佳答案

你应该使用 self.client.post(url, data)在您的测试中,因为您的 View 正在寻找 POST 数据 ( request.POST ) 而不是 request.GET .

我还建议重构您的 View 以匹配此处给出的模板:https://docs.djangoproject.com/en/1.10/topics/forms/#the-view

我对您的测试将数据传递给 self.client.get 的方式感到有点困惑.假设您的表单包含字段 carID , Driver_Last_Name , 等, 调用 self.client.get应该看起来像 self.client.get(url, data={'carID': <id>, 'Driver_Last_Name': <driver_last_name>, ...}) . 'form'不需要 key 。 self.client.post也是如此.另见此处:https://docs.djangoproject.com/en/1.10/topics/testing/tools/#django.test.Client.get

关于python - 如何使用 request.post 执行 Django 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42628439/

相关文章:

Django 过滤查询在大行数据集上速度缓慢

django - django的备份策略

python - Django Heroku 和 postgresql

python - Django REST Framework client.login() 不起作用。 (用户创建)

django - 断言在Django测试中两个对象列表相等

python - 将多个文件从 Django 表单保存到模型

python - Selenium 在 Firefox 中使用过多的 RAM

Python 和 GTK3 : How to create a Liststore

python - 调用多个函数并返回集体结果

python - 将 django.test.LiveServerTestCase 的 live_server_url 与另一个字符串连接时出现类型错误