我正在开发一个 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
使用开发设置,看起来我的开发站点本身运行良好。但是,尽管测试似乎加载了 OK(默认值和开发)settings.DEBUG
设置为False
. 我不知道为什么,或者这是否是问题的原因。