Django 测试URL是否与正确的视图匹配

Django 测试URL是否与正确的视图匹配,django,django-urls,django-testing,Django,Django Urls,Django Testing,对于这两种django url模式 (r'^articles/(\d{4})/$,“news.views.year\u archive'), (r'^articles/2003/$,'news.views.special_case_2003'), special\u case\u 2003视图将永远不会被调用,因为它上面有更宽的模式 我如何测试(在tests.py中)通过URL模式匹配的视图,以确保我的URL与所需的视图匹配您应该首先考虑特殊情况: (r'^articles/2003/$', '

对于这两种django url模式

(r'^articles/(\d{4})/$,“news.views.year\u archive'),

(r'^articles/2003/$,'news.views.special_case_2003'),

special\u case\u 2003
视图将永远不会被调用,因为它上面有更宽的模式


我如何测试(在tests.py中)通过URL模式匹配的视图,以确保我的URL与所需的视图匹配

您应该首先考虑特殊情况:

(r'^articles/2003/$', 'news.views.special_case_2003'),
(r'^articles/(\d{4})/$', 'news.views.year_archive'),
url从上到下求值,从而呈现url匹配的第一个视图。您可以在浏览器中使用这些URL来测试这些URL,也可以在tests.py中为它们编写特定的测试

有关如何测试urls.py的更多信息,请阅读本文,其中解释了如何检查是否收到200个响应,以及如何测试是否存在某些内容

下面是一个典型的例子:

>>> from django.test.client import Client
>>> c = Client()
>>> response = c.post('/login/', {'username': 'john', 'password': 'smith'})
>>> response.status_code
200
>>> response = c.get('/customer/details/')
>>> response.content
'<!DOCTYPE html...'
来自django.test.client导入客户端的
>>
>>>c=客户机()
>>>response=c.post('/login/',{'username':'john','password':'smith'})
>>>response.status\u代码
200
>>>response=c.get(“/customer/details/”)
>>>答复.内容

“这不允许您匹配原始正则表达式,但允许您匹配模式的示例:

from django.core.urlresolvers import resolve

def test_foo(self):
    func = resolve('/foo/').func
    func_name = '{}.{}'.format(func.__module__, func.__name__)
    self.assertEquals('your.module.view_name' func_name)

是的,特例应该是第一位的,但是在很多情况下,您正在扩展第三方应用程序,可能会发生冲突。我想在tests.py中为它们编写一个特定的测试,问题是如何?嗨,MYaser。你开始阅读了吗?是的,我读了,但是没有测试url匹配的内容,你可以测试上下文、模板。。。但最后您无法明确知道执行了什么视图,您可以读取并检查selenium(例如)