【问题标题】:Unittest sensitive_post_parameters decorator in django viewdjango 视图中的 unittestsensitive_post_parameters 装饰器
【发布时间】:2018-10-18 08:07:26
【问题描述】:

我希望在我的 django 项目中创建新用户。

我将 @sensitive_post_parameters 装饰器应用于该视图,以确保在出现未处理的异常或类似情况时不记录密码(如源代码 https://docs.djangoproject.com/en/2.0/_modules/django/views/decorators/debug/ 中的 cmets 所示)。

当我继续测试视图时,我想确保对敏感信息的这种保护仍然存在(我没有错误地删除函数的装饰器或其他东西)。

我知道,由于装饰器应用于我的函数,我无法直接从视图测试中对其进行测试。

但是,例如,使用 @login_required 装饰器,我可以使用 assertRedirects 测试它的效果(如How to test if a view is decorated with "login_required" (Django) 此处所述)。

我一直在寻找一种方法来做到这一点,但我找不到可行的方法。

我想到了这样的事情:

def test_senstive_post_parameters(self):
    request = RequestFactory().post('create_user', data={})
    my_sensitive_parameters = ['password']
    self.assertEqual(
        request.sensitive_post_parameters,
        my_senstive_parameters
    )

但这给了我一个

AttributeError: 'WSGIRequest' object has no attribute 'sensitive_post_parameters'

任何帮助将不胜感激。 即使它告诉我我不应该尝试对此进行测试,尽管我真的很想这样做,因为这似乎是一个重要的行为,我应该确保在以后修改它时保留在我的代码中。

【问题讨论】:

    标签: python django unit-testing views decorator


    【解决方案1】:

    您已经使用RequestFactory 创建了一个request,但您并没有实际使用它。要测试视图的效果,您需要导入视图并调用它。

    from myapp.views import create_user
    
    def test_senstive_post_parameters(self):
        request = RequestFactory().post('create_user', data={})
        response = create_user(request)
        my_sensitive_parameters = ['password']
        self.assertEqual(
            request.sensitive_post_parameters,
            my_senstive_parameters
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-02
      • 2014-06-07
      • 2016-08-14
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      相关资源
      最近更新 更多