Phi*_*ord 38 django unit-testing middleware messages
我正在研究一个Django项目并正在为它编写单元测试.但是,在测试中,当我尝试登录用户时,我收到此错误:
MessageFailure: You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware
Run Code Online (Sandbox Code Playgroud)
登录实际站点工作正常 - 并使用MessageMiddleware显示登录消息.
在我的测试中,如果我这样做:
from django.conf import settings
print settings.MIDDLEWARE_CLASSES
Run Code Online (Sandbox Code Playgroud)
然后它输出:
('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')
Run Code Online (Sandbox Code Playgroud)
这似乎表明在运行测试时安装了MessageMiddleware.
我有一个明显的步骤吗?
UPDATE
根据下面的建议,它确实看起来像是一个设置的东西.
我目前settings/__init__.py喜欢这个:
try:
from settings.development import *
except ImportError:
pass
Run Code Online (Sandbox Code Playgroud)
并settings/defaults.py包含大部分标准设置(包括MIDDLEWARE_CLASSES).然后settings.development.py覆盖其中一些默认值,如下所示:
from defaults import *
DEBUG = True
# etc
Run Code Online (Sandbox Code Playgroud)
使用开发设置看起来我的开发站点本身工作正常.但是,虽然测试似乎加载设置OK(默认和开发)settings.DEBUG设置为False.我不知道为什么,或者这是否是问题的原因.
Tar*_*edo 59
使用RequestFactory创建请求时,Django 1.4 有一个错误.
要解决此问题,请使用RequestFactory创建请求并执行以下操作:
from django.contrib.messages.storage.fallback import FallbackStorage
setattr(request, 'session', 'session')
messages = FallbackStorage(request)
setattr(request, '_messages', messages)
Run Code Online (Sandbox Code Playgroud)
适合我!
| 归档时间: |
|
| 查看次数: |
6528 次 |
| 最近记录: |