Django请求在TestClass中的此服务器上找不到URL

时间:2018-06-08 17:32:02

标签: django django-testing django-tests

我的TestClass看起来像:

from django.test import TestCase, Client

class TestGetSomething(TestCase):
    def test_get_first_url(self):
        path = "some/long/path"
        client = Client()
        response = client.get(path=path)
        self.assertEqual(response.status_code, 200)

但是assertEquals引发了例外404 != 200 当我写print(response.__dict__)时,我已经注意到要求字段:

'_closable_objects': [<WSGIRequest: GET 'somelong/path'>]
'request': {'PATH_INFO': 'some/long/path', 'REQUEST_METHOD': 'GET', 'SERVER_PORT': '80', 'wsgi.url_scheme': 'http', 'QUERY_STRING': ''}
'templates': [<django.template.base.Template object at 0x7f4b33ac17f0>], 'context': [{'True': True, 'False': False, 'None': None}, {'request_path': '/somelong/path/', 'exception': 'Resolver404'}]  

正如您所看到的那样,路径的一部分没有“某些”之间的斜线。并且&#39;长&#39;
当我试图通过URL手动获取页面时(使用浏览器)一切正常 在我的Django应用程序中,除了Model和ModelAdmin之外我什么都不使用。甚至urls.py也很清楚 现在每个人我怎么能修好它? 如有必要,我会添加任何其他代码。

1 个答案:

答案 0 :(得分:2)

路径应以斜杠/ 开头。事实上,在你的浏览器中它没有什么不同,因为如果你写localhost:8000/some/long/path,第一个斜杠只是path的一部分。此外,浏览器通常会修复&#34;一个网址,如example.comexample.com/

因此你需要写出:

class TestGetSomething(TestCase):

    def test_get_first_url(self):
        # start with a slash
        path = "/some/long/path"
        client = Client()
        response = client.get(path=path)
        self.assertEqual(response.status_code, 200)