Django TestCase 对象没有 'session' 属性

0 投票
2 回答
592 浏览
提问于 2025-04-20 16:51

我正在学习Django中的测试。在测试任何东西之前,我需要先创建用户并登录。我尝试了以下方法...

class ProjectTest(TestCase):
    def setUp(self):
        self.email = 'test@test.com'
        self.password = 'test'
        self.new_user = AppUser.objects.create_superuser(email=self.email, password=self.password)

        new_user = authenticate(username=self.email,
                                    password=self.password)

        login(request, new_user)
        self.assertEqual(login, True)

    def tearDown(self):
        self.new_user.delete()

但是我遇到了一个错误:AttributeError: 'str' object has no attribute 'session',意思是说我用的字符串对象没有'session'这个属性。

我还尝试了:

def setUp(self):
    self.email = 'test@test.com'
    self.password = 'test'        
    self.new_user = AppUser.objects.create_superuser(email=self.email, password=self.password)
    login = self.new_user.login(username=self.email, password=self.password)

但系统提示我没有叫做login的东西。

那正确的做法是什么呢?

2 个回答

1
class ProjectTest(TestCase):

    def test_login_feature(self):
        user = User.objects.create_user(username='joe', password='pass')
        self.client.login(username='joe', password='pass')
        # client now authenticated and can access 
        # restricted views. 

这样你就可以做到这一点。首先创建一个用户,然后使用 self.client.login 来登录。你可以在文档中了解更多关于如何使用它的信息。

2

你不是对用户进行登录,而是对测试客户端的一个实例进行登录。

self.client.login(username=self.email, password=self.password)

撰写回答