2017-03-06 2 views
1

ich habe eine Ansichtsmethode, die ich gerne testen würde. Ich liefere die self.client.get-Methode mit den Daten, aber es schlägt fehl, das Formular zu überprüfen. Was mache ich falsch?Wie man einen Django-Test mit einem request.post durchführt?

using django 1.8 
python 3.5 

dies ist die Ansicht Methode

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!") 

dies der Testmethode ist

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) 

auch diesen Test Arbeit beachten Ursache es die Antwort bekommt ist das, was ich habe. aber die Zeile, die kommentiert wird, ist was ich verwenden möchte

Aber ich kann nicht scheinen, um die Informationen zu der DriverForm zu füttern. jede Hilfe wird sehr geschätzt werden

Antwort

1

Sie sollten self.client.post(url, data) in Ihrem Test verwenden, da Ihre Ansicht nach den POST-Daten (request.POST) und nicht nach request.GET sucht.

ich auch Ihre Ansicht Refactoring würde vorschlagen, dass die Vorlage hier gegeben entsprechen: https://docs.djangoproject.com/en/1.10/topics/forms/#the-view

Ich bin ein wenig verwirrt durch die Art und Weise Ihrer Testdaten zu self.client.get passieren. Vorausgesetzt, Ihr Formular enthält die Felder carID, Driver_Last_Name usw., sollte der Aufruf an self.client.get wie self.client.get(url, data={'carID': <id>, 'Driver_Last_Name': <driver_last_name>, ...}) aussehen. Der Schlüssel 'form' sollte nicht benötigt werden. Das gleiche gilt für self.client.post. Siehe auch hier: https://docs.djangoproject.com/en/1.10/topics/testing/tools/#django.test.Client.get

+0

ich kann nicht glauben, dass ich das nicht gesehen habe !! ....... ive wurde mit get anstelle von post, danke für die antwort wird es versuchen – Blue

Verwandte Themen