我正在做一个Django项目,并且正在为它编写单元测试.但是,在测试中,当我try 让用户登录时,我收到以下错误:

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.

我有没有漏掉什么明显的步骤?

UPDATE

在下面的建议之后,它看起来确实像是设置的问题.

我现在有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.我不知道为什么,或者这是否是问题的原因.

推荐答案

Django 1.4 has a expected behavior,当您使用RequestFactory创建可能触发此错误的请求时.

要解决此问题,请使用RequestFactory创建您的请求并执行以下操作:

from django.contrib.messages.storage.fallback import FallbackStorage
setattr(request, 'session', 'session')
messages = FallbackStorage(request)
setattr(request, '_messages', messages)

对我很管用!

Django相关问答推荐

在保存新实例之前删除一个实例(Django模型保存方法)

管理器不能通过对象上的对象实例访问.保存()

如何在uwsgi中创建单个日志(log)文件?

Django 中主键的隐式 UUID 自动字段

如何使用具有某些权限的 Django 组的转储数据和加载数据?

django 的 Manager.create() 方法有什么作用?

Django授权判断具有通配符模式的URL

是否可以在 Django 中重命名应用程序的组名?

Django模型中的密码字段

验证 Django 模型对象的正确方法?

如何验证对象是否存在于多线程中

Django post_save 在不覆盖模型 save() 的情况下防止递归

Django Rest Framework - 缺少静态目录

django admin 排序外键字段列表

在 django admin 中链接到外键对象

过滤 Django 数据库中包含数组中任何值的字段

如何测试 Django QuerySets 是否相等?

Django 多项 Select 字段/复选框 Select 多个

如何将 settings.py 中的变量传递给视图?

如何获取 Django 模型字段对象的值