我有个奇怪的问题。。。在
我试图测试@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
返回{
简短的说法:“可能是你的固定装置。”
长版。。。在
我在升级到1.11后遇到了这个问题。我花了一分钟才弄清楚,但是当您升级版本时,Django会升级后端密码哈希器用于测试密码的迭代次数。在
这样做的结果是,在您的测试中,您可能有一个fixture,其中一行如下:
在你的测试中,你可能会有一些类似的东西:
^{pr2}$结果是,当您修改Django版本并获得额外的哈希值时,旧的fixture不再工作,因为新的Django对测试代码提供的密码进行哈希处理的次数比fixture中的值还要多。在
解决方案:
或者,这里有一个哈希值,您可以在fixture中使用密码“password”:
有趣的东西。抱歉,不好玩。愚蠢。在
首先,不需要使用} 方法中设置用户。在
self.c = Client()
创建一个新的客户机,只需使用self.client
。不应使用__init__
方法访问数据库。相反,您应该在setUp
或^{如果要检查客户机登录是否有效,应该检查
self.client.login(...)
的值。没有点检查self.user.is_authenticated()
,因为它总是返回True
。在您的登录不工作,因为
self.user.password
是哈希密码,而不是实际密码。在您可以改为使用^{} 。在
^{pr2}$相关问题 更多 >
编程相关推荐