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)
您的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)