如何测试django中的url

Jam*_*eid 5 python testing django django-urls django-testing

我想在django中测试我的网址,但是我收到了错误消息.

这是我的代码:

urls.py

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

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)
Run Code Online (Sandbox Code Playgroud)

我会得到这个结果:

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
Run Code Online (Sandbox Code Playgroud)

请帮我处理我的代码.先感谢您.

ils*_*005 11

正如@Selcuk所说,你错过了URL中的尾部斜杠.为了避免这些拼写错误,万一你的URL会改变一段时间,你应该使用django的反向函数来获取URL:

# django 1.x
from django.core.urlresolvers import reverse
# django 2.x
from django.urls import reverse

def test_create(self):
    response = self.client.get(reverse('create', args=[self.userName]))
    self.assertEqual(response.status_code, 200)
Run Code Online (Sandbox Code Playgroud)

  • 在Django 2.0中:`from django.urls import reverse` (2认同)

Sel*_*cuk 7

您的URL配置后需要一个斜杠(/)userName.由于您未将其包含在测试URL中,因此Django首先将重定向(301)返回到正确的URL.

改变线

response = self.client.get('/mission/create/' + str(self.userName))
Run Code Online (Sandbox Code Playgroud)

response = self.client.get('/mission/create/' + str(self.userName) + '/')
Run Code Online (Sandbox Code Playgroud)

或更好

response = self.client.get('/mission/create/{0}/'.format(self.userName))
Run Code Online (Sandbox Code Playgroud)