2016-04-14 5 views
0
def test_saving_a_POST_request(self): 

     request = HttpRequest() 
     request.method = "POST" 
     request.POST['item_text'] = "A new list item" 
     response = new_list(request) 
     # response = self.client.post('lists/new', {'item_text': "A new list item"}) 
     new_item = Item.objects.first() 
     self.assertEqual(Item.objects.count(), 1) 
     self.assertEqual(new_item.text, 'A new list item') 

Dies ist die Methode zum Testen der Antwort nach dem Erscheinen der new_list-Ansicht. Es funktioniert gut, wenn ich HttpRequest() verwende, es wirft einen Fehler, wenn ich versucht habe, eingebauten Client zu verwenden, um (die kommentierte Zeile) die Daten anstelle von HttpRequest zu posten.Testgetriebene Entwicklung mit Python - Kapitel 6

Der Fehler:

====================================================================== 
FAIL: test_saving_a_POST_request (lists.tests.NewListTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/Users/prabhath/PycharmProjects/superlists/lists/tests.py", line 95, in test_saving_a_POST_request 
    self.assertEqual(Item.objects.count(), 1) 
AssertionError: 0 != 1 

---------------------------------------------------------------------- 

Ich denke, es gibt ein Problem mit, wie ich den Client verwenden, um Daten zu senden. Dies ist die link für den Abschnitt in Lehrbuch, dass ich las. Jede Hilfe wird geschätzt.

Django - 1.9.5, Python - 3.5

+0

Wenn Sie einen Fehler erhalten, sollten Sie sagen, was es ist. –

+1

Könnten Sie versuchen, '/ lists/new /' anstelle von 'lists/new' in Ihrem Client-Aufruf zu verwenden (beachten Sie den führenden Schrägstrich)? –

+0

@JoeyWilhelm Ich habe eine URL definiert, die mit lists beginnt und mit url url endet (r '^ lists/new $', ansichten.new_list, name = 'new_list'). Aber ich habe versucht, es hat nicht funktioniert. – kiran6

Antwort

3

Ich würde vermuten, dass die URL Ihrer Ansicht der nicht korrekt verwiesen wird. Sie möchten höchstwahrscheinlich Djangos integrierte URL-Auflösungsmethoden verwenden, anstatt die URL hart zu codieren, wie Sie es haben. Das würde Ihren Testfall in etwa so aussehen lassen:

from django.core.urlresolvers import reverse_lazy 
from django.test import TestCase 

from .models import Item 


class ItemTestCase(TestCase): 

    def test_saving_a_POST_request(self): 
     response = self.client.post(reverse_lazy('new_list'), {'item_text': "A new list item"}) 
     new_item = Item.objects.first() 
     self.assertEqual(Item.objects.count(), 1) 
     self.assertEqual(new_item.text, 'A new list item') 
+0

Danke, das hat das Problem gelöst. – kiran6

Verwandte Themen