如何在Django Unittesting中测试AnonymousUser

Joh*_*Mee 4 testing django

  • 我正在测试一张表格
  • 当与表单一起呈现时,用户可以登录或匿名登录
  • 如果表单成功,则用户将登录
  • 如果表单失败,用户将保持原样
  • 我想通过单元测试来确认这种行为.

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)
Run Code Online (Sandbox Code Playgroud)

request.user如果我要提交第二个请求,我的unittest可以确定现在是谁吗?

And*_*dov 6

你可以这样做:

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():
   ...
Run Code Online (Sandbox Code Playgroud)

它的工作原理是因为客户端保持用户会话(client.session).

  • @Sebastialonso 创建一个 AnonymousUser:使用“from django.contrib.auth.models import AnonymousUser”导入,然后在代码中添加“request.user = AnonymousUser()”。我从[这个问题](/sf/ask/404421321/)得到了这个信息 (2认同)