Django如何在客户端tes中设置请求用户

2024-06-01 06:19:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在测试一个视图,测试结果如下:

def test_profile(self, user_id):
    user = User.objects.create_user(username="myusername", password="password", email="abc@testmail.com")
    self.client.user = user

    print(user.id)

    request = self.client.get("/account/profile/{}/".format(user_id), follow=True)
    self.assertEqual(request.status_code, 200)

在这里,我的概要视图有login_requireddecorator。所以我如何设置user为request.user


Tags: testselfclient视图idobjectsrequestdef
2条回答

我自己也在尝试这样做,但是发现Django测试客户机没有在请求中设置user,并且在以任何其他方式使用客户机时无法设置request.user。我用了RequestFactory。

def setUp(self):
    self.request_factory = RequestFactory()
    self.user = User.objects.create_user(
        username='javed', email='javed@javed.com', password='my_secret')

def test_my_test_method(self):
    request = self.request_factory.post(reverse('home'), {'question_title_name':'my first question title', 'question_name':'my first question', 'question_tag_name':'first, question'})
    request.user = self.user
    response = home_page(request)

有关请求工厂here的详细信息

试试这个:

from django.test import TestCase, Client

from django.contrib.auth.models import User

class YourTestCase(TestCase):
    def test_profile(self, user_id):
        user = User.objects.create(username='testuser')
        user.set_password('12345')
        user.save()
        client = Client()
        client.login(username='testuser', password='12345')
        response = client.get("/account/profile/{}/".format(user.id), follow=True)
        self.assertEqual(response.status_code, 200)

在这里,我首先创建用户并设置用户的登录凭据。然后我创建一个客户机并使用该用户登录。因此,在views.py中,当您执行request.user时,将获得此用户。

相关问题 更多 >