如何制作一个简单的 Django URLconf 和 reverse() 以进行测试?(获取 TypeError: unhashable type: 'list')

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。

Ala*_*air 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)