LoginSignup
2
4

More than 3 years have passed since last update.

【Django】テストでリダイレクト先のページを検証する方法

Last updated at Posted at 2019-06-09

はじめに

Djangoのテストをしようとしたが、views.pyの中で、
return redirect(reverse('menu:main'))
のようにしていると、テスト時に以下のようにHTTPのレスポンスコードを検証すると、エラーになる。
self.assertEqual(response.status_code, 200)

リダイレクトするときは一旦#302で一時ページが来てから最終的に#200でリダイレクト先のページというように返ってくるためである。
これを解消する方法を説明する(備忘録)。

テスト方法

TestCaseの以下のメソッドを用いる。
assertRedirects(response, expected_url, status_code=302, target_status_code=200, msg_prefix='', fetch_redirect_response=True)

引数 意味
response GET/POSTしたレスポンス
expected_url 最終的にリダイレクトされるURL
status_code はじめに返ってくるHTTPのレスポンスコード
target_status_code 最終的に返ってくるHTTPのレスポンスコード
msg_prefix テスト結果のメッセージのプレフィックス
fetch_redirect_response 最終ページをロードするか否か

テストコード例

tests.py
class AccountsAuthViewTests(TestCase):
    def test_auth_success(self):
        data = {
            'username': 'test',
            'password': 'password',
        }

        response = self.client.post(reverse('accounts:auth'), data)
        self.assertRedirects(response, reverse('menu:main'), status_code=302, target_status_code=200, msg_prefix='', fetch_redirect_response=True)

参考

2
4
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
2
4