django视图中的unittest sensitive_post_parameters装饰器

时间:2018-05-08 11:26:08

标签: python django unit-testing views decorator

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

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

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

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

但是,例如,使用@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'

任何帮助将不胜感激。 即使它告诉我我不应该尝试测试这个,虽然我真的很想,因为它似乎是一个重要的行为,我应该确保在我的代码中保留,因为它稍后被修改。

1 个答案:

答案 0 :(得分:1)

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

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
    )