LoginSignup
7
9

More than 5 years have passed since last update.

Django で認証されたページでテストする方法

Posted at

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)

で行けそうです。

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9