我这里有个奇怪的问题...

我试图测试@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__方法访问数据库。而是应使用setUpsetupTestData方法设置用户。

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)

10-08 03:11