2015-07-22 84 views
3

我测试的景色,我的测试看起来像:的Django如何设置要求用户在客户端测试

def test_profile(self, user_id): 
    user = User.objects.create_user(username="myusername", password="password", email="[email protected]") 
    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装饰。那么我如何设置用户请求。用户

+5

['client.login()'](https://docs.djangoproject.com/en/1.8/topics/testing/tools/#django.test.Client.login) –

回答

5

我试图自己做同样的事情,但发现Django测试客户端不会在请求中设置用户,并且无法在使用客户端时设置request.user任何其他方式。我使用了RequestFactory。

def setUp(self): 
    self.request_factory = RequestFactory() 
    self.user = User.objects.create_user(
     username='javed', email='[email protected]', 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

试试这个:

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时,你会得到这个用户。

+0

请添加一个小解释以提供帮助其他用户。 –

+0

@ThomasSmyth按照您的建议添加。希望它很清楚。 –