Google App Engine用フレームワークKayで@login_required の付いた関数のテスト方法

Google App Engine用フレームワークKayで@login_required の付いた関数をテストする方法。

Kayにはテストでログイン状態の設定を簡単に行うことが出来る機能が用意されています。

「Client.test_login(username=ユーザー名)」で指定したユーザーでログインした状態になります。
「Client.test_logout()」でログアウトした状態になります。

まず、一般的なテストは次のようになります。
(17.4. テスト用 Client を使用する — Kay v0.10.0 documentationより)

from werkzeug import BaseResponse, Client
from kay.app import get_application
from kay.utils.test import (
  init_recording, get_last_context, get_last_template, disable_recording
)
from kay.ext.testutils.gae_test_base import GAETestBase

class MyappTestCase(GAETestBase):
    CLEANUP_USED_KIND = True

    def setUp(self):
        init_recording()
        app = get_application()
        self.client = Client(app, BaseResponse)

    def tearDown(self):
        disable_recording()

テストを一つ追加します。

  def test_get(self):
        #ログインしていないときは、そのまま表示
        #ログインしているときは、リダイレクトして別のページを表示

ログインしていないときのテスト

response = self.client.get(url_for('myapp/user_index'))
self.assertEqual(response.status_code, 200)

ユーザー名「test」のユーザーでログインしている状態でのテスト(testというユーザー名のユーザーがあるものとします。)

self.client.test_login(username='test')
self.assertEqual(response.status_code, 302) #Redirect

テスト全体のコードは次のようになります。

  def test_get(self):
        #ログインしていないときは、そのまま表示
        response = self.client.get(url_for('myapp/user_index'))
        self.assertEqual(response.status_code, 200)

        #ログインしているときは、リダイレクトして別のページを表示
        self.client.test_login(username='test')
        self.assertEqual(response.status_code, 302) #Redirect

このように、ログイン状態に応じた簡単にテストができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください