我这里有个奇怪的问题...
我试图测试@login_required视图,所以我写了这段代码:
from django.test import TestCase
from django.test import Client
from .models import SiteEcommerce
from .models import Client as TestDbClient
from .models import MyCustomEmailUser
class DataBaseTestCase(TestCase):
def __init__(self, *args, **kwargs):
super(DataBaseTestCase, self).__init__(*args, **kwargs)
self.c = Client() # instantiate the Django test client
self.user = MyCustomEmailUser.objects.all()[0]
def test_method(self):
"""
Test of the settings page.
"""
self.c.login(username=self.user.email, password=self.user.password)
print self.user.is_authenticated()
response = self.client.get('/main/settings/%s' % self.website.idsite)
self.assertEqual(response.status_code, 200)
我正在打印
settings_view
的视图称为request.user
问题是在测试
print self.user.is_authenticated()
中给True
但在视图中返回request.user
返回AnonymousUser
最佳答案
首先,无需使用self.c = Client()
创建新客户端-只需使用self.client
。您不应使用__init__
方法访问数据库。而是应使用setUp
或setupTestData
方法设置用户。
def setUp(self, *args, **kwargs):
self.user = MyCustomEmailUser.objects.all()[0]
如果要检查客户端登录是否有效,则应检查
self.client.login(...)
的值。没有点检查self.user.is_authenticated()
,因为它将始终返回True
。您的登录无效,因为
self.user.password
是哈希密码,而不是实际密码。您可以改用
force_login
。self.client.force_login(self.user)