【问题标题】:Django: How to associate a user with a request factoryDjango:如何将用户与请求工厂相关联
【发布时间】:2015-03-27 22:10:20
【问题描述】:

我正在为 Django 站点上的表单编写一些测试。我想测试登录用户是否能够使用假设输入正确的表单。为此,我正在使用 Django 请求工厂。我似乎无法让我的测试用户登录。那,或者我什至没有正确地提出请求。我不知道。相关代码如下:

def create_user():
        username = 'User '+id_generator()
        return User.objects.create(username = username, password = 'password')

def test_can_register_deck(self):
        t = create_empty_tourney()
        u = create_user()
        d = create_deck(u)
        rf = RequestFactory()
        request = rf.post(reverse('tourney:tourney', args=(t.slug,)),{'deck' : d})
        request.user = u
        response = self.client.get(reverse('tourney:tourney', args=(t.slug,)), request)
        self.assertEqual(response.status_code, 200)

请求必须认为用户已登录,否则测试的其余部分将无法工作。这不会引发任何错误,但我什至不确定我的response 是否正确使用了请求。我是否正确地告诉测试“以该用户的身份向锦标赛页面发出发布请求,并尝试提交套牌”?

【问题讨论】:

    标签: python django testing django-testing django-tests


    【解决方案1】:

    我认为RequestFactory和客户端是测试django视图的两种不同方式。

    rf.post 返回的request 旨在直接传递给视图函数。如果你这样做,我想你会发现,用户将被检测为已登录。

    我查看了source 和文档,但没有看到测试客户端在哪里接受请求。您可以使用以下方式使用测试客户端登录用户:

    self.client.login(
       username=u.username,
       password='password')
    

    【讨论】:

    • 我现在明白了。感谢您的指导。对于那些感兴趣的人,我的response 行需要是这样的:response = tourney(request, t.slug) 其中t.slug 是必需的位置参数。
    猜你喜欢
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2013-12-10
    • 2020-01-04
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多