2014-08-31 70 views
0

我是我的Django項目,並決定單元測試是一個好主意。我試圖圍繞一個視圖編寫一個簡單的單元測試,但是我得到了來自響應的<h1>Not Found</h1><p>The requested URL /index was not found on this server.</p>。爲什麼會發生?簡單的django單元測試給404 - 什麼是正確的設置程序?

這裏是我的單元測試..

from django.test import TestCase 

class BookerIndexTests(TestCase): 
    def test_anonymous_request(self): 
     response = self.client.get('booker:index') 
     self.assertEqual(response.status_code, 200) 

在我的urls.py,我有這行我的索引:url(r'^$', views.index, name='index'),

我在這裏缺少一個設置步驟?爲什麼這個基本的單元測試會拋出404錯誤?

回答

4

正如Daniel Roseman指出的那樣,您不能直接在client.get()中使用模式名稱。如果您想使用模式名稱而不是路徑本身,則可以使用reverse。你的代碼看起來是這樣的:

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


class BookerIndexTests(TestCase): 
    def test_anonymous_request(self): 
     response = self.client.get(reverse('booker:index')) 
     self.assertEqual(response.status_code, 200) 

這通常是我在我的測試套件,這樣做,因爲我喜歡在路徑上使用的模式名稱。

1

您傳遞的網址格式名稱爲client.get(),而不是實際路徑。您需要傳遞實際的索引路徑,即根據urlconf - 「/」。

+0

謝謝。對於傳遞URL模式名稱是否更友好,因爲如果將來實際的url路徑發生變化,我們將不必修改所有的測試。 – Jim 2014-08-31 21:27:39

相關問題