Как настроить обмен сообщениями и промежуточное ПО сеанса в Django RequestFactory во время модульного тестирования

У меня есть функция, которую мне нужно проверить, которая принимает запрос в качестве аргумента. Он не отображается как URL-адрес, поэтому я не могу проверить его с помощью тестового клиента.

Мне нужно передать объект запроса к нему, а объект запроса должен иметь промежуточное ПО обмена сообщениями, потому что в функции используется промежуточное программное обеспечение для обмена сообщениями.

Я использую RequestFactory для создания моего запроса. В документации говорится:

Он не поддерживает промежуточное программное обеспечение. Атрибуты сеанса и аутентификации должны предоставляться самим тестом, если это необходимо для правильного функционирования представления.

Как настроить промежуточное программное обеспечение для обмена сообщениями с помощью RequestFactory? Я думаю, мне также понадобится промежуточное ПО сеанса, чтобы сделать промежуточное программное обеспечение для обмена сообщениями

Это ошибка, которую в настоящее время производит мой тест при использовании функции "RequestFactory".

MessageFailure: You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware

Это моя функция под тестированием, если она помогает понять эту проблему:

from django.contrib import messages as django_messages

def store_to_request(self, request):
        """
        Place all the messages stored in this class into message storage in
        the request object supplied.
        :param request: The request object to which we should store all the messages
        :return: Does not return anything
        """
        for message in self._messages:
            django_messages.add_message(request, message.level, message.message, message.extra_tags,
                                    message.fail_silently)

Ответ 1

Эта проблема была поднята, поэтому, как сказано, вы можете исправить свои модульные тесты с помощью этого кода:

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

Ответ 2

Если вам не нужно проверять поведение самого объекта запроса, вы можете издеваться над запросом, используя библиотеку mock вместо RequestFactory, например:

import mock

request = mock.MagicMock()

# Call your function using the mocked request
store_to_request(request)