Dan*_*aro 6 django integration-testing django-urls python-2.7
我正在编写调用django.core.urlresolvers.reverse()生成链接的便捷代码。但是,我似乎无法编写一个简单的URLconf来进行快速测试。
这是我尝试过的:
>>> from django.conf.urls import patterns, url
>>> conf = patterns('', url(r'^foo/$', lambda request: None, name='foo'))
>>> from django.core.urlresolvers import reverse
>>> reverse('foo', conf)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File ".../env/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 445, in reverse
resolver = get_resolver(urlconf)
File ".../env/local/lib/python2.7/site-packages/django/utils/functional.py", line 27, in wrapper
if mem_args in cache:
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
我在 Python 2.7 上使用 Django 1.5。
我会考虑创建一个test_urls.py模块
from django.conf.urls import patterns, include, url
urlpatterns = patterns('', url(r'^foo/$', lambda request: None, name='foo'))
Run Code Online (Sandbox Code Playgroud)
然后test_urls.py在您调用reverse测试时给出路径。
reverse('foo', 'path.to.test_urls')
Run Code Online (Sandbox Code Playgroud)
如果你真的想urlconf在你的测试中创建,你需要确保它有一个urlpatterns属性。以下在 Django 1.4 中有效。
from django.conf.urls import patterns, url
from django.core.urlresolvers import reverse
class MockUrlConf(object):
urlpatterns = patterns('', url(r'^foo/$', lambda request: None, name='foo'))
reverse('foo', MockUrlConf)
Run Code Online (Sandbox Code Playgroud)