Djangoはテストもわりと簡単に出来るんですが、今回認証が必要なページで単純なアクセステストをしたらハマったので書いておきます。
test.py
from django.test import TestCase, RequestFactory
from django.contrib.auth.models import User
from .views import SomeGenericView
class TestSomeView(TestCase):
def test_some_auth_page(self):
user = User.objects.create_user(...) # ログインユーザー作成
rf = RequestFactory()
request = rf.get("/some/auth/page")
request.user = user
res = SomeGenericView.as_view()(request)
self.assertEqual(res.status_code, 200)
RequestFactory()
でリクエストオブジェクトを生成して、それに認証したいユーザーを突っ込む的なやり方でした。
ドキュメントはこちら
Advanced testing topics | Django documentation | Django
もうちょっとやりやすいやり方はないのだろうか・・・
ちなみに、POSTしたいときは、
test_post.py
class TestSomeView2(TestCase):
def test_some_auth_page_post(self):
user = ... # 同上
rf = RequestFactory()
req = rf.post("/some/post/url", data={"edit": "value"}) # ここだけ違う
req.user = user # ユーザーを突っ込む
res = SomeGenericView.as_view()(req)
self.assertEqual(res.status_code, 302)
で行けそうです。