【问题标题】:Accessing the request.user object when testing Django测试 Django 时访问 request.user 对象
【发布时间】:2012-02-25 21:02:51
【问题描述】:

我在使用 django 的客户端类测试我的应用程序时尝试访问 request.user 对象。

from django.test import TestCase
from django.test.client import Client

class SomeTestCase(TestCase):

    def setUp(self):
        self.client = Client()
        self.client.login( username="foo", password="bar")

    def test_one(self):
        response = self.client.get("/my_profile/")
        self.fail( response.request.user )

这显然会失败,但它失败了,因为 response.request 没有用户属性。

AttributeError: 'dict' object has no attribute 'user'

有没有办法从客户端实例访问用户对象?我想这样做是为了检查某些测试用户的数据是否正确呈现。我可以尝试通过在设置期间设置所有必要信息来解决这个问题,但在我这样做之前,我想检查一下我是否只是错过了一些东西。

【问题讨论】:

    标签: django testing client request


    【解决方案1】:

    使用response.context['user']。

    如果您使用RequestContext,用户在模板上下文中自动可用。请参阅auth data in templates doc。

    否则我认为您应该查询它:

     def test_one(self):
        response = self.client.get("/my_profile/")
        user = User.objects.get(username="foo")
        self.fail( user.some_field == False )
    

    【讨论】:

    【解决方案2】:

    这似乎是一种迂回的方式,但它可能很有用。

    使用RequestFactory,它非常简单。它模仿 request 对象。

    from django.test import TestCase, RequestFactory 
    from django.test.client import Client
    from django.contrib.auth.models import User
    
    class SomeTestCase(TestCase):
    
        def setUp(self):
            self.client = Client()
            self.factory = RequestFactory()
            self.user = User.objects.create_user(
                        username='foo', email='foo@bar', 
                        password='bar')
    
        def test_one(self):
            self.client.login( username="foo", password="bar")
    
            request = self.factory.get("/my_profile/")
            request.user = self.user
    
            #rest of your code
    
        def tearDown(self):
            self.user.delete()
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      相关资源
      最近更新 更多