Проблема промежуточного программного обеспечения в сообщениях Django при тестировании после запроса - PullRequest
3 голосов
/ 25 апреля 2019

Я пытаюсь протестировать UpdateView, который добавляет сообщение на страницу перенаправленного успеха. Кажется, моя проблема связана с messages из-за возвратов pytest:

django.contrib.messages.api.MessageFailure: Вы не можете добавлять сообщения без установки django.contrib.messages.middleware.MessageMiddleware

Мой тестовый код:

def test_authenticated_staff(self, rf):
    langues = LanguageCatalog.objects.create(
        lang_src='wz',
        lang_dest='en',
        percent='4'
    )
    req = rf.get(reverse("dashboard.staff:lang-update", kwargs={'pk': langues.pk}))
    data = {'lang_src': 'it',
            'lang_dest': 'en',
            'percent': '34'}
    req = rf.post(reverse(
        "dashboard.staff:lang-update", kwargs={'pk': langues.pk}), data=data)
    req.user = UserFactory()
    resp = views.LangUpdateView.as_view()(req, pk=langues.pk)

Я точно указал, что MessageMiddleware присутствует в настройках MIDDLEWARE. Я пользуюсь Django==2.0.13.

1 Ответ

6 голосов
/ 25 апреля 2019

Я нашел решение. Чтобы протестировать такой запрос, необходимо сначала аннотировать его сеансом, а затем сообщениями. На самом деле это означает добавить эти строки:

from django.contrib.messages.middleware import MessageMiddleware
from django.contrib.sessions.middleware import SessionMiddleware

# in your test method:
"""Annotate a request object with a session"""
middleware = SessionMiddleware()
middleware.process_request(req)
req.session.save()

"""Annotate a request object with a messages"""
middleware = MessageMiddleware()
middleware.process_request(req)
req.session.save()

# and then (in my case)
resp = views.LangUpdateView.as_view()(req, pk=langues.pk)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...