在运行manage.py test时django.contrib.messages.tests中的虚假失败

4 投票
1 回答
717 浏览
提问于 2025-04-16 02:26

我最近在我的应用程序中添加了身份验证(当然是通过django.contrib.auth),并在base.html中加入了合适的“登录”和“注册”链接。

问题出现在我运行manage.py测试时,出现了4个失败,都是来自django.contrib.messages.tests:

ERROR: test_middleware_disabled_anon_user (django.contrib.messages.tests.cookie.CookieTest)
ERROR: test_middleware_disabled_anon_user (django.contrib.messages.tests.fallback.FallbackTest)
ERROR: test_middleware_disabled_anon_user (django.contrib.messages.tests.user_messages.LegacyFallbackTest)
ERROR: test_middleware_disabled_anon_user (django.contrib.messages.tests.session.SessionTest)

所有的失败都是同样的错误:

TemplateSyntaxError: Caught NoReverseMatch while rendering: Reverse for 'django.contrib.auth.views.login' with arguments '()' and keyword arguments '{}' not found.

manage.py shell中,这个是可以正常工作的:

>>> from django.core.urlresolvers import reverse
>>> reverse('django.contrib.auth.views.login')
'/signin/'

但是这个就不行:

>>> reverse('django.contrib.auth.views.login', (), {})
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/dave/Dropbox/Projects/statbooks.co.uk/lib/python2.6/site-packages/django/core/urlresolvers.py", line 350, in reverse
    *args, **kwargs)))
  File "/Users/dave/Dropbox/Projects/statbooks.co.uk/lib/python2.6/site-packages/django/core/urlresolvers.py", line 296, in reverse
    "arguments '%s' not found." % (lookup_view_s, args, kwargs))
NoReverseMatch: Reverse for 'django.contrib.auth.views.login' with arguments '()' and keyword arguments '{}' not found.

如果我把base.html中的{% url %}标签注释掉,测试就能通过了。

这是什么原因呢?

1 个回答

3

在这个Django的讨论中,有几个解决方法的建议和相关链接:http://code.djangoproject.com/ticket/11077。我比较喜欢的一个建议是这个:http://groups.google.com/group/django-developers/msg/ec7508651e9e9fb8。简单来说,它把内置的测试和应用的测试分开,然后修改了manage.py的测试命令,只运行应用的测试。

不过,这些建议都没有解决根本问题(也就是所有的单元测试都应该能够运行,即使基础模板使用了{% url %}标签)。

撰写回答