2016-03-02 45 views
3

我想在django中測試我的網址,但我收到了錯誤消息。如何在django中測試網址

這裏是我的代碼:

urls.py

url(r'^create/(?P<userName>[0-9a-zA-Z-]+)/$', views.create, name='create'), 

test.py

from django.test import TestCase, Client 

client = Client() 


def test_create(self): 
    """Test the url for "create" 
    """ 

    response = self.client.get('/mission/create/' + str(self.userName)) 
    self.assertEqual(response.status_code, 200) 

,我會得到這樣的結果:

FAIL: test_create (mission.tests.MissionUrlTests) 
Test the url for "create" 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/actinbox/mission/tests.py", line 122, in test_create 
    self.assertEqual(response.status_code, 200) 
AssertionError: 301 != 200 

請幫我與我的代碼在這裏。先謝謝你。

回答

6

您的URL配置在userName之後需要一個尾部斜線(/)。由於您未將其包含在測試網址中,因此Django首先會將重定向(301)返回到正確的URL。

更改線路

response = self.client.get('/mission/create/' + str(self.userName)) 

response = self.client.get('/mission/create/' + str(self.userName) + '/') 

或更好

response = self.client.get('/mission/create/{0}/'.format(self.userName)) 
+0

謝謝你這麼多......現在已經工作! :) –

5

正如@Selcuk說,你缺少的URL尾隨斜線。爲了避免這些錯別字和的情況下,您的URL會改變一些時間,你應該使用django's reverse函數來獲取網址:

from django.core.urlresolvers import reverse 

def test_create(self): 
    response = self.client.get(reverse('create', args=[self.userName])) 
    self.assertEqual(response.status_code, 200) 
+0

反過來是@ ilse2005所說的最可取的選擇。 – Aipi