2017-03-06 94 views
1

我得到了一種我喜歡測試的視圖方法。我提供self.client.get方法的數據,但它無法驗證表單。我究竟做錯了什麼?如何使用request.post執行django測試?

using django 1.8 
python 3.5 

這是視圖方法

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。任何幫助將不勝感激

回答

1

您應該在測試中使用self.client.post(url, data),因爲您的視圖正在查找POST數據(request.POST)而不是request.GET

我也建議重構你的觀點,以匹配這裏給出的模板:通過測試數據傳遞給self.client.get方式https://docs.djangoproject.com/en/1.10/topics/forms/#the-view

我有點困惑。假設您的表單有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

+0

我不能相信我沒有看到!! .......我一直使用get而不是post,謝謝你的回覆會試試看 – Blue

相關問題