Flaskテスト環境構築は(勉強不足による)ハマりポイント多し。

前回ViewMethodViewクラスを使って実装を始めたアプリのUIをテストしたい。
と思って、FlaskのTesting Flask Applicationsを見ながら実装するも、ハマるハマる。

sessionに格納した情報を元に動作する関数のテストってどうやるの?

こうやるんだそうです。

from flask import Flask, session
app = Flask("hoge")
with app.test_client() as c:
    c.get('/login')
    assert session['foo'] == 42

でも実行してみるとこんなエラーをraiseしてくれちゃいます。なんやこれ。

bash-3.2$ nosetests
E..
======================================================================
ERROR: test_get (test_api_account.TestAccountApi)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/takashi/Development/necco/test/test_api_account.py", line 59, in test_get
    with c.session_transaction() as ses:
  File "/Users/takashi/.anyenv/envs/pyenv/versions/3.5.1/Python.framework/Versions/3.5/lib/python3.5/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/Users/takashi/.anyenv/envs/pyenv/versions/3.5.1/envs/necco/lib/python3.5/site-packages/flask/testing.py", line 92, in session_transaction
    raise RuntimeError('Session backend did not open a session. '
RuntimeError: Session backend did not open a session. Check the configuration
----------------------------------------------------------------------
Ran 3 tests in 1.200s
FAILED (errors=1)
bash-3.2$ exit
exit
shell returned 1

ググってみると、Stackoverflowにありがたい記事発見。

If you did not set a custom app.session_interface, then you forgot to set a secret key

「SECRET_KEYの設定してないんじゃないの?」というご指摘。あ、確かに。
設定してみると、しっかり動きました。

sessionを予めログイン済み状態にしてテストしたい

from flask import Flask
app = Flask("hoge")
with app.test_client() as c:
    with c.session_transaction() as sess:
        sess['username'] = 'hoge_user'
    c.get()

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

Close Bitnami banner
Bitnami