【发布时间】:2012-08-09 21:50:44
【问题描述】:
我正在开发一个 Django 项目,并正在为它编写单元测试。但是,在测试中,当我尝试登录用户时,出现此错误:
MessageFailure: You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware
在实际站点上登录可以正常工作 -- 并且使用 MessageMiddleware 显示登录消息。
在我的测试中,如果我这样做:
from django.conf import settings
print settings.MIDDLEWARE_CLASSES
然后它输出这个:
('django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware')
这似乎表明在运行测试时安装了 MessageMiddleware。
我是否缺少明显的步骤?
更新
根据下面的建议,它看起来确实是一个设置问题。
我目前有这样的settings/__init__.py:
try:
from settings.development import *
except ImportError:
pass
和settings/defaults.py 包含大部分标准设置(包括MIDDLEWARE_CLASSES)。然后settings.development.py 会覆盖其中的一些默认值,如下所示:
from defaults import *
DEBUG = True
# etc
看起来我的开发网站本身运行良好,使用开发设置。但是,尽管测试似乎可以加载设置(默认和开发)settings.DEBUG 设置为False。我不知道为什么,或者这是否是问题的原因。
【问题讨论】:
-
您能否解决您的问题。如果是这样,你能分享一下如何吗?我面临同样的事情,从 git repo 运行最新的 Django 1.6。
-
我最终试图让我的测试绕过它,这意味着到目前为止,任何引发这个问题的棘手测试最终都没有被编写出来。这并不理想。祝你好运。
标签: django unit-testing messages middleware