测试 Django 时访问 request.user 对象

mis*_*rte 6 testing django client request

我在使用 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 )
Run Code Online (Sandbox Code Playgroud)

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

AttributeError: 'dict' object has no attribute 'user'
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*mro 2

使用response.context['user']

如果您使用 ,则用户将自动在模板上下文中可用RequestContext。请参阅模板文档中的身份验证数据

否则我相信你应该查询它:

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

  • 请参阅http://stackoverflow.com/questions/2840467/problems-using-user-model-in-django-unit-tests,它使用了 Secator 的建议,但在 setUp 和tearDown 方法中,更干净一点。 (2认同)