如何使用request.post执行django测试?

Blu*_*lue 5 python django django-tests

我有一个我喜欢测试的视图方法.我正在为数据提供self.client.get方法,但无法验证表单.我究竟做错了什么?

using django 1.8
python 3.5
Run Code Online (Sandbox Code Playgroud)

这是视图方法

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!")
Run Code Online (Sandbox Code Playgroud)

这是测试方法

 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)
Run Code Online (Sandbox Code Playgroud)

还要注意这个测试工作,因为它得到的反应是我得到的.但评论的行是我想要使用的

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

Mar*_*aum 6

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

我还建议重构您的视图以匹配此处给出的模板: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'不应该需要的关键.同样的道理self.client.post.另见:http://psocdddang.目录