Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When I run the full test suite in Django, I get errors about missing MessageMiddleware

My app is called abcapp. I am running Django 1.5b1 on Python 2.7. The same issue happens in the latest trunk release of django.

When I run manage.py test abcapp all tests which I have written pass.

When I run manage.py test I get a cascade of failures. The first of these failures is shown:

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

The test results are:

======================================================================
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)

Contrary to the messages, I do have django.contrib.messages.middleware.MessageMiddleware in my MIDDLEWARE_CLASSES. The value of my MIDDLEWARE_CLASSES is below. I use messages within my app without any issues.

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',
)

Can anyone shed some light on this issue? While I can run my own tests only, I would like to run the entire suite to ensure proper quality control.

Research results: I noticed through my own testing, that when the test http Client is used, none of the middleware is loaded. I discovered this when I was trying to test my own middleware through web requests in the test Client. If that is the case, would this mean that there is untestable code in the djanog core?

like image 490
Krystian Cybulski Avatar asked Dec 01 '12 13:12

Krystian Cybulski


1 Answers

It seems that is a bug of the windows version.

Here is the issue File-based session does not store any data on Windows. Recommended workaround: just replace os.rename with shutil.move in 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

like image 186
alexs Avatar answered Nov 11 '22 13:11

alexs