我正在对用“login_required”装饰的视图进行一些(独立的)单元测试。例子:
@login_required
def my_view(request):
return HttpResponse('test')
是否可以测试“my_view”函数是否用“login_required”修饰?
我知道我可以通过集成测试(使用测试客户端)来测试行为(匿名用户被重定向到登录页面),但我想通过隔离测试来完成。
任何想法?
Thanks!
当然,必须可以通过某种方式对其进行测试。但这绝对不值得。编写完全隔离的单元测试来检查装饰器是否已应用只会导致非常复杂的测试。测试错误的可能性比测试行为错误的可能性要高得多。我会强烈劝阻它。
测试它的最简单方法是使用 DjangoClient
伪造对关联 URL 的请求,并检查重定向。如果您使用 Django 的任何测试用例作为基类:
class MyTestCase(django.test.TestCase):
def test_login_required(self):
response = self.client.get(reverse(my_view))
self.assertRedirects(response, reverse('login'))
稍微复杂一点但更独立的测试是使用 RequestFactory 直接调用视图来创建请求对象。assertRedirects()
在这种情况下不起作用,因为它取决于设置的属性Client
:
from django.test.client import RequestFactory
class MyTestCase(django.test.TestCase):
@classmethod
def setUpClass(cls):
super(MyTestCase, cls).setUpClass()
self.rf = RequestFactory()
def test_login_required(self):
request = self.rf.get('/path/to/view')
response = my_view(request, *args, **kwargs)
self.assertEqual(response.status_code, 302)
self.assertEqual(response['Location'], login_url)
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)