0
在Django測試課程中,self.client.login(...)
正在返回False
,我不明白爲什麼。這是測試模塊在Django測試中無法登錄剛剛創建的用戶
"""Tests for views."""
from django.contrib.auth.models import User
from .models import UserProfile
from django.test import TestCase
TEST_USER = {"username": "kermit", "password": "timrek",
"first_name": "Kermit", "last_name": "The Frog",
"birth_year": 1955, "email": "[email protected]"}
class ViewTestCase(TestCase):
"""Tests for views."""
def setUp(self_ignored):
"""Insert demo users."""
user = User(
username=TEST_USER['username'], password=TEST_USER['password'],
first_name=TEST_USER['first_name'],
last_name=TEST_USER['last_name'], email=TEST_USER['email'])
user.save()
profile = UserProfile(user_id=user.id,
birth_year=TEST_USER['birth_year'])
profile.save()
試圖登錄用戶中的功能(這是相同的文件的底部):
def test__view_for_logged_in_user(self):
"""Verify expected content on the main birth-stats page, for a
logged-in user.
"""
print("TEST_USER=" + TEST_USER)
did_login_succeed = self.client.login(
username=TEST_USER['username'],
password=TEST_USER['password'])
#print the just inserted users
users = User.objects.all()
print("Total users actually in the database=" + str(users.count()))
for user in users:
print('Actually-inserted user: ' + str(user))
self.assertTrue(did_login_succeed) #Fails
#test view here
正如可以在調試輸出看到,測試用戶確實正在插入:
$ python manage.py test auth_lifecycle.test__views2
Creating test database for alias 'default'...
TEST_USER={'username': 'kermit', 'email': '[email protected]', 'password': 'timrek', 'birth_year': 1955, 'last_name': 'The Frog', 'first_name': 'Kermit'}
Total users actually in the database=1
Actually-inserted user: kermit
F
======================================================================
FAIL: test__view_for_logged_in_user (auth_lifecycle.test__views2.ViewTestCase)
Verify expected content on the main birth-stats page, for a
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jeffy/django_files/django_auth_lifecycle/auth_lifecycle/test__views2.py", line 47, in test__view_for_logged_in_user
self.assertTrue(did_login_succeed)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 1 test in 0.009s
FAILED (failures=1)
Destroying test database for alias 'default'...
爲什麼此登錄失敗(返回False)?
這裏的模型
"""Defines a single extra user-profile field for the user-authentication
lifecycle demo project: Birth year.
"""
from django.contrib.auth.models import User
from django.db import models
class UserProfile(models.Model):
"""One piece of extra information about a user: Birth year.
---NOTES---
Useful related SQL:
- `select id from auth_user where username <> 'admin';`
- `select * from auth_lifecycle_userprofile where user_id=(x,x,...);`
"""
# This line is required. Links UserProfile to a User model instance.
user = models.OneToOneField(User, related_name="profile")
# The additional attributes we wish to include.
birth_year = models.IntegerField(
blank=True,
verbose_name="Year you were born")
# Override the __str__() method to return out something meaningful
def __str__(self):
return self.user.username