2016-04-14 50 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') 

這是用於測試new_list視圖的post響應的方法。當我使用HttpRequest()時它工作正常,當我嘗試使用內置客戶端發佈(註釋行)數據而不是HttpRequest時,它會引發錯誤。Python測試驅動開發 - 第6章

錯誤:

====================================================================== 
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 

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

我覺得這是我與如何使用客戶端發佈數據的問題。這是我正在閱讀的課本中的link。任何幫助表示讚賞。

Django的 - 1.9.5, 蟒蛇 - 3.5

+0

如果你得到一個錯誤,你應該說它是什麼。 –

+1

你可以嘗試在客戶端調用中使用'/ lists/new /'而不是'lists/new'(注意前導斜槓)嗎? –

+0

@JoeyWilhelm我定義了一個以列表開頭並以url url結尾的url(r'^ lists/new $',views.new_list,name ='new_list')。但我試過它沒有工作。 – kiran6

回答

3

我猜想,您的視圖的URL沒有被正確引用。您很可能想要使用Django的內置URL解析方法,而不是像您一樣對網址lists/new進行硬編碼。這會使你的測試案例看起來像這樣:

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

謝謝,這解決了這個問題。 – kiran6