[英]Django Unit Testing - Client login does not seem to work
在進行我自己的單元測試時,我一直在參考https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Testing 中的教程。 我的單元測試代碼如下:
from django.core.urlresolvers import reverse
from django.test import Client, TestCase
from django.contrib.auth.models import User
from companies.models import Company
class ContactViewTest(TestCase):
def setUp(self):
self.client = Client(HTTP_HOST='localhost:8000')
company = Company(name='Test')
company.save()
user = User.objects.create(username='test_user1', email='test_user1@test.com')
user.set_password('password')
user.save()
self.user = user
self.company = company
def test_logged_in_all_contacts_correct_template(self):
c = self.client
user_login = c.login(username=self.user.username, password=self.user.password)
self.assertTrue(user_login)
resp = c.get(reverse('all-contacts'), follow=True)
# Check if user is logged in
self.assertEquals(str(resp.context['user']), 'test_user1')
# Check if response is "success"
self.assertEqual(resp.status_code, 200)
self.assertTemplateUsed(resp, 'all_contacts.html')
在運行 python manage.py test contacts.tests 時,我遇到了一些錯誤。
第一個是self.assertTrue(user_login)
返回AssertionError: False is not true
第二個是self.assertEquals(str(resp.context['user']), 'test_user1')
當我刪除self.assertTrue(user_login)
時返回AssertionError: 'AnonymousUser' != 'test_user1'
除了 client.login() 沒有按我預期的那樣工作之外,我不太確定出了什么問題,所以提前感謝任何可以提供幫助的人。
問題是self.user.password
是散列密碼。
你可以這樣做,
user_login = c.login(username=self.user.username, password='password')
或者您可以改用force_login
,它不需要密碼。
c.force_login(self.user)
以下任何情況都是可能的:
確保您使用的是正確的 DJANGO_SETTINGS_MODULE。
以下應用程序應列在INSTALLED_APPS
:
INSTALLED_APPS = (
...,
'django.contrib.auth',
'django.contrib.sessions'
..,
)
MIDDLEWARE
應列出以下中間件:
MIDDLEWARE = (
...,
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
...,
)
如果您已將django.contrib.auth.models.User
與自定義用戶my_app.User
交換,則測試要求您在INSTALLED_APPS
和AUTH_USER_MODEL
列出my_app
,即
INSTALLED_APPS = (
...,
'my_app',
..,
)
AUTH_USER_MODEL = 'my_app.User'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.