Unit Test Solucion para el error django.contrib.messages.middleware.MessageMiddleware

Fuentes


raise MessageFailure('You cannot add messages without installing '
django.contrib.messages.api.MessageFailure: You cannot add messages without
installing django.contrib.messages.middleware.MessageMiddleware

Cuando en la view crea un django.contrib.messages, con en UnitTest me da un error cuando accedo con RequestFactory, para solucionarlo.

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

Ejemplo mas largo.

def test_send_mail(self):
    """
    Manda un email cuando se ha completado el
    formulario.
    """
    form_data = {
        'email': 'test@example.com',
        'subject': 'test subject',
        'message': 'test test test'
    }
    request = self.factoty.post(reverse('contact.contact'), data=form_data)
    # http://stackoverflow.com/questions/11938164/
    # why-dont-my-django-unittests-know-that-messagemiddleware-is-installed
    from django.contrib.messages.storage.fallback import FallbackStorage
    setattr(request, 'session', 'session')
    messages = FallbackStorage(request)
    setattr(request, '_messages', messages)
    # ----- #
    request.user = self.user
    ContactView.as_view()(request)
    self.assertEqual(len(mail.outbox), 1)