繁体   English   中英

强制登录不适用于固定装置(Django TestCase)

[英]Force login not working with fixtures (Django TestCase)

我正在通过固定装置填充我的测试数据库,并且一切正常。 但是,我无法让loginforce_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM