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
このように、ログイン状態に応じた簡単にテストができます。