【问题标题】:How to test for AnonymousUser in Django Unittesting如何在 Django 单元测试中测试 AnonymousUser
【发布时间】:2013-06-28 05:03:22
【问题描述】:
  • 我正在测试一个表单
  • 用户在看到表单时可能已登录或匿名
  • 如果表单成功,用户将登录
  • 如果表单失败,用户将保持原样
  • 我想通过单元测试来确认这种行为。

django.test.Client 确实有一个 login 方法来处理这种事情,但是给定一个 response 对象我如何确定谁登录了?

    data = {'email':'john@example.com','password':'abc'}
    c = Client()
    # here was can assume `request.user` is the AnonymousUser
    # or I can use `c.login(..)` to log someone in
    r = c.post('/myform/', data)

如果我要提交第二个请求,我的单元测试能否确定 request.user 现在是谁?

【问题讨论】:

    标签: django testing


    【解决方案1】:

    你可以这样做:

    client = Client()
    # here was can assume `request.user` is the AnonymousUser
    # or I can use `c.login(..)` to log someone in
    from django.contrib import auth
    user = auth.get_user(client) # it returns User or AnonymousUser
    
    if user.is_anonymous():
       ...
    

    它之所以有效,是因为 client 保留了一个用户会话 (client.session)。

    【讨论】:

    • 有没有办法使用RequestFactory做到这一点?
    • @Sebastialonso 创建一个 AnonymousUser:使用 from django.contrib.auth.models import AnonymousUser 导入,然后在您的代码中添加 request.user = AnonymousUser()。我从this SO question得到这个信息
    猜你喜欢
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多