/ / Django-Testfall Fehler 'WSGIRequest' Objekt hat kein Attribut 'Sitzung' - Python, Django, Django-Sitzungen, Django-Wsgi, Django-Tests

Django-Testfall Fehler 'WSGIRequest' Objekt hat kein Attribut 'Sitzung' - Python, Django, Django-Sitzungen, Django-Wsgi, Django-Tests

Ich versuche, ein paar Tests für meine Django-App zu schreiben und es gibt einen Fehler:

File "/Users/croberts/.virtualenvs/litem/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 101, in login
if SESSION_KEY in request.session:
AttributeError: "WSGIRequest" object has no attribute "session"

Hier ist mein Code, den ich versuche auszuführen:

class SimpleTest(TestCase):
def setUp(self):
self.request_factory = RequestFactory()

def test_signup(self):
request = self.request_factory.post("/signup/", {
"email": "email@email.com",
"password": "password",
"password-confirm": "password",
"firm": "big law firm"})
response = signup_user(request)
user = User.objects.get(email="email@email.com")
self.assertEqual(user.username, "email@email.com")
self.assertEqual(user.firm, "big law firm")
self.assertEqual(response.status_code, 302) #if it"s successful it redirects.

Hier ist meine Middleware:

MIDDLEWARE_CLASSES = [
"django.middleware.security.SecurityMiddleware",
"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",
]

und meine installierten Apps:

INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"patents",
]

Antworten:

6 für die Antwort № 1

Verwenden Sie den Testclient anstelle der Anforderungsfactory. Dies hat den Vorteil, dass Sie Ihre URL-Konfiguration testen können.

class SimpleTest(TestCase):
def test_signup(self):
response = self.client.post("/signup/", {
"email": "email@email.com",
"password": "password",
"password-confirm": "password",
"firm": "big law firm"})
user = User.objects.get(email="email@email.com")
self.assertEqual(user.username, "email@email.com")
self.assertEqual(user.firm, "big law firm")
self.assertEqual(response.status_code, 302) #if it"s successful it redirects.