【问题标题】:Django unit testing: AttributeError: 'WSGIRequest' object has no attribute 'user'Django单元测试:AttributeError:'WSGIRequest'对象没有属性'user'
【发布时间】:2019-01-14 14:32:52
【问题描述】:

运行测试时,我得到以下错误输出:

用户 = 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/")

错误输出

用户 = self.request.user AttributeError: 'WSGIRequest' 对象没有属性 'user'

【问题讨论】:

    标签: django-testing


    【解决方案1】:

    在第一个测试test_anonymous 中,您实际上并没有设置用户。根据文档https://docs.djangoproject.com/en/2.1/topics/testing/advanced/#the-request-factory,如果您使用RequestFactory,则不会执行中间件,您必须明确设置用户。所以如果你想再次测试AnonymousUser,你应该设置request.user = AnonymousUser()。如果不这样做,请求对象将没有user 属性,因此会出现错误。

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 2016-10-23
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 2016-02-02
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      相关资源
      最近更新 更多