Django的单元测试:AttributeError的:“WSGIRequest”对象没有属性“用户”

问题描述 投票:0回答:1

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

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

我试图从MIDDLEWAREMIDDLEWARE_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/")

error output

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

django-testing
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.