確かに、何らかの方法でテストできるはずです。しかし、それは間違いなく価値がありません。デコレータが適用されていることを確認するために完全に分離された単体テストを作成すると、非常に複雑なテストになります。テストされた動作が間違っているよりも、テストが間違っている可能性の方がはるかに高いです。私はそれを強く思いとどまらせます。
これをテストする最も簡単な方法は、Django を使用Clientして関連する 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)
...