当我在Django中运行完整的测试套件时,我收到有关缺少MessageMiddleware的错误

时间:2012-12-01 13:28:41

标签: python django testing python-2.7 python-unittest

我的应用程序名为abcapp。我在Python 2.7上运行Django 1.5b1。同样的问题发生在django的最新主干版本中。

当我运行manage.py test abcapp时,我写的所有测试都通过了。

当我运行manage.py test时,我遇到了一连串的失败。显示了第一个失败:

Traceback (most recent call last):
  File "C:\Program Files\Django-1.5b1\django\core\handlers\base.py", line 116, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "C:\Program Files\Django-1.5b1\django\views\decorators\cache.py", line 89, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "C:\Program Files\Django-1.5b1\django\contrib\messages\tests\urls.py", line 30, in add
    getattr(messages, message_type)(request, msg)
  File "C:\Program Files\Django-1.5b1\django\contrib\messages\api.py", line 70, in debug
    fail_silently=fail_silently)
  File "C:\Program Files\Django-1.5b1\django\contrib\messages\api.py", line 22, in add_message
    raise MessageFailure('You cannot add messages without installing '
MessageFailure: You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware

测试结果如下:

======================================================================
FAIL: test_clearsessions_command (django.contrib.sessions.tests.FileSessionTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Program Files\Django-1.5b1\django\test\utils.py", line 213, in inner
    return test_func(*args, **kwargs)
  File "C:\Program Files\Django-1.5b1\django\contrib\sessions\tests.py", line 444, in test_clearsessions_command
    self.assertEqual(1, count_sessions())
AssertionError: 1 != 2

----------------------------------------------------------------------
Ran 474 tests in 5.768s

FAILED (failures=1, skipped=141, expected failures=1)

与消息相反,我的django.contrib.messages.middleware.MessageMiddleware中确实有MIDDLEWARE_CLASSES。我MIDDLEWARE_CLASSES的价值低于。我在我的应用程序中使用消息没有任何问题。

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'debug_toolbar.middleware.DebugToolbarMiddleware',
)

有人能解释一下这个问题吗?虽然我只能运行自己的测试,但我希望运行整个套件以确保适当的质量控制。

研究结果:我通过自己的测试注意到,当使用测试http客户端时,没有加载任何中间件。当我试图通过测试客户端中的Web请求测试我自己的中间件时,我发现了这一点。如果是这种情况,这是否意味着djanog核心中存在不可测试的代码?

1 个答案:

答案 0 :(得分:8)

这似乎是Windows版本的一个错误。

问题是File-based session does not store any data on Windows。 推荐的解决方法:只需将os.rename替换为shutil.move中的django/contrib/sessions/backends/file.py

+import shutil

....

 -os.rename(output_file_name, session_file_name)

 +shutil.move(output_file_name, session_file_name)

Original patch