【问题标题】:Django Test : SESSION_KEY failing assertInDjango 测试:SESSION_KEY 失败 assertIn
【发布时间】:2014-04-17 05:23:26
【问题描述】:

我正在使用 Django 测试客户端 (django.test.Client) 来运行视图测试。在尝试在我的处理登录后请求的索引函数上使用测试客户端时,即使身份验证成功发生,它也会不断失败测试。

这是我的测试:

def test_login(self):
   response = self.client.post('/login/', {'username':'user', 'password':'pass'})

   print response.content

   self.assertIn(SESSION_KEY, self.client.session) 

所以我知道登录过程成功的原因是 response.content 从另一个视图生成 HTML 数据,只有在 request.user.is_authenticated() 为真时才能访问。换句话说,他们必须为 response.content 登录才能产生“登录页面”。因此,鉴于此,我可以看出该功能显然适用于登录用户的实际目的,但是,我一直在搜索文档数小时试图弄清楚为什么我无法从客户端会话访问 SESSION_KEY。我所有的阅读都表明,django 测试客户端实际上是有状态的,应该存储会话。

有人能解释一下吗?

【问题讨论】:

    标签: python django django-views django-testing


    【解决方案1】:

    好的,在#django 上进行大量搜索和询问后,我为 Django 1.6.x 制定了一个可行的解决方案

    from django.contrib.auth import SESSION_KEY, get_user_model
    from django.test import Client
    
    def setUp(self):
        self.client = Client()
    
    def test_login_view(self):
    
        user_pk = get_user_model()._default_manager.get(username__exact='test_username_here').pk
    
        response = self.client.post('/login/', {'username':'test_username_here', 'password':'test_password_here'})
    
        self.assertEqual(self.client.session[SESSION_KEY], user_pk)
    

    test_login_view 函数将评估我的应用程序中处理来自模板表单的用户登录的视图。首先,我抓取 user_pk,它是数据库中给定用户的真正主键。我使用 get_user_model() 而不是 User.objects.get() 因为前者允许您引用而不管 User 模型是否被修改。当然你也可以使用后者。其次,我继续使用测试客户端发送发布请求,就像标准用户的浏览器一样。最后,我发现 self.client.session[SESSION_KEY] 包含登录用户的主键。 (如果登录成功,否则只会产生 KeyError)

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多