簡體   English   中英

django 如何在客戶端測試中設置請求用戶

[英]django how to set request user in client test

我正在測試一個視圖,我的測試看起來像:

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_required裝飾器。 那么如何將用戶設置為 request.user

我試圖自己做同樣的事情,但發現 Django 測試客戶端沒有在請求中設置用戶,並且在通過任何其他方式使用客戶端時不可能設置 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)

更多關於請求工廠在這里

嘗試這個:

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 時,你會得到這個用戶。

這有效:

self.client.force_authenticate(user=user)

如果您有回復,您可以訪問response.context['user']

如果您需要一個響應對象,只需調用將創建上下文的任何視圖,例如response = self.client.get('/')

如果你使用django.test你可以做這樣的事情:

self.client.force_login(user)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM