Модульное тестирование Django: AttributeError: у объекта 'WSGIRequest' нет атрибута 'user' - PullRequest
0 голосов
/ 14 января 2019

При выполнении тестов у меня выводится следующая ошибка:

user = self.request.user AttributeError: у объекта 'WSGIRequest' нет атрибута 'user'

Я попытался переключиться с MIDDLEWARE на MIDDLEWARE_CLASSES и наоборот. В настоящее время я использую Django 2.1.

Кроме того, я попытался сменить промежуточное ПО, но это не помогло.

settings.py

MIDDLEWARE = (
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.auth.middleware.SessionAuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
    "django.middleware.security.SecurityMiddleware",
    "whitenoise.middleware.WhiteNoiseMiddleware",  # to serve static files
)

test_views.py

from django.test import (TestCase,
                     RequestFactory
                     )
from mixer.backend.django import mixer

from .. import views
from accounts.models import User


class TestHomeView(TestCase):
    def test_anonymous(self):
        req = RequestFactory().get("/")
        resp = views.HomeView.as_view()(req)
        self.assertEquals(resp.status_code, 200,
                          "Should be callable by anyone")

    def test_auth_user(self):
        req = RequestFactory().get("/")
        req.user = mixer.blend("accounts.User")
        resp = views.HomeView.as_view()(req)
        self.assertTrue("dashboard" in resp.url,
                        "Should redirect authenticated user to /dashboard/")

ошибка вывода

user = self.request.user AttributeError: у объекта 'WSGIRequest' нет атрибута 'user'

1 Ответ

0 голосов
/ 09 февраля 2019

В первом тесте test_anonymous вы фактически не настраиваете пользователя. Согласно документации https://docs.djangoproject.com/en/2.1/topics/testing/advanced/#the-request-factory, промежуточное программное обеспечение не выполняется, если вы используете RequestFactory и вам необходимо явно указать пользователя. Поэтому, если вы хотите протестировать снова AnonymousUser, вам следует установить request.user = AnonymousUser(). Если вы этого не сделаете, объект запроса не будет иметь атрибута request и, следовательно, ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...