[英]Force login not working with fixtures (Django TestCase)
我正在通过固定装置填充我的测试数据库,并且一切正常。 但是,我无法让login
或force_login
正常工作。 用户也在夹具中。
当我尝试测试第一个视图时,它会重定向到登录页面。
class TestUnauthUser(TestCase):
fixtures = ['project.json']
@classmethod
def setUpTestData(cls):
cls.client = Client()
# Get User and Login
cls.unauth_user = User.objects.get(username='unauth_user')
print(cls.unauth_user.pk)
#cls.login = cls.client.login(username=cls.unauth_user.username, password=cls.unauth_user.password)
cls.client.force_login(cls.unauth_user)
# Get Project
cls.project = Project.objects.get(slug='test-project')
cls.slug_dict = {'slug': cls.project.slug}
# Get Task
cls.task = Task.objects.get(slug='test-task')
def test_login(self):
self.assertTrue(self.unauth_user.login)
def test_project_view(self):
# Project Main
response = self.client.get(reverse('customerportal:project', kwargs=self.slug_dict))
self.assertEqual(response.status_code, 403)
我能够验证我是否拥有正确的用户对象: print(cls.unauth_user.pk)
。 所以用户存在并且正在被获取。 但是,它仍然没有登录成功。
我发现了问题。 force_login()
必须在每次测试之前运行。 因此,执行以下操作可以解决问题:
def setUp(self):
self.client.force_login(self.unauth_user)
但是,这似乎与setUpTestData
的目的背道而驰。 据我了解,在setUpTestData
下设置的任何内容都应该在课程期间持续。 所以我不确定为什么即使从那里设置了force_login
必须重复运行。 如果有人可以提供进一步的背景信息,我们将不胜感激。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.