Kay Framework に同梱されている werkzeug の Client クラスを使えば、ビューの単体テストができます。ただし万能ではなく、login_required デコレータがついたログイン必須のビューはテストできません。仕方ないので、テストしたい処理をログイン不要なメソッドに切り出したりして、今まで対処していました。
Kay 本体のテストコードを眺めていると、kay.utils.test に Client クラスがあることを発見。werkzueg の Client を拡張し、ログインとログアウトをエミュレートするメソッドが追加されているではないですか!これを使えばログイン必須のビューをテストできます。
from google.appengine.ext import db from werkzeug import BaseResponse from kay.app import get_application from kay.ext.testutils.gae_test_base import GAETestBase from kay.utils.test import Client from core.models import Task class TaskViewTest(GAETestBase): CLEANUP_USED_KIND = True def setUp(self): app = get_application() self.client = Client(app, BaseResponse) def tearDown(self): # テストメソッドが終わるたびにログアウトする self.client.test_logout() def test_create(self): # ログイン必須のビューをテストするために # ログインする self.client.test_login(email='test@example.com') data = { "name": "foo" } self.client.post('/', data=data) actual = Task.all().get() self.assertEquals("foo", actual.name)
ログイン必須のビューまでテストできるなんて、Kay 無敵すぎる。