如何使用 request.post 执行 Django 测试?
How to perform a Django test with a request.post?
我正在使用 Django 1.8 和 Python 3.5。
我有一个我想测试的视图方法。我正在为 self.client.get
方法提供数据,但它无法验证表单。我做错了什么?
这是查看方式:
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)
,因为您的视图正在查找 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
也是如此。另见此处:https://docs.djangoproject.com/en/1.10/topics/testing/tools/#django.test.Client.get
我正在使用 Django 1.8 和 Python 3.5。
我有一个我想测试的视图方法。我正在为 self.client.get
方法提供数据,但它无法验证表单。我做错了什么?
这是查看方式:
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)
,因为您的视图正在查找 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
也是如此。另见此处:https://docs.djangoproject.com/en/1.10/topics/testing/tools/#django.test.Client.get