我正在测试一个视图,我的测试看起来像:
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
答案 0 :(得分:8)
我试图自己做同样的事情,但发现Django Test Client没有在请求中设置用户,并且在通过任何其他方式使用Client时无法设置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
的更多信息答案 1 :(得分:5)
试试这个:
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')
request = client.get("/account/profile/{}/".format(user.id), follow=True)
self.assertEqual(request.status_code, 200)
在这里,我首先创建用户并为用户设置登录凭据。然后我创建一个客户端并使用该用户登录。因此,在views.py中,当您执行request.user
时,您将获得此用户。
答案 2 :(得分:1)
这有效:
self.client.force_authenticate(user=user)
答案 3 :(得分:0)
如果您有回复,您可以访问 response.context['user']
。
如果您需要一个响应对象,只需调用将创建上下文的任何视图,例如response = self.client.get('/')
。