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