1. ホーム
  2. python

[解決済み] Flask のアプリやリクエストコンテキストを必要とするコードのテスト

2023-06-03 05:09:36

質問

私は working outside of request context にアクセスしようとすると session にアクセスしようとしたとき。 コンテキストを必要とするものをテストする場合、どのように設定すればよいのでしょうか?

import unittest
from flask import Flask, session

app = Flask(__name__)

@app.route('/')
def hello_world():
    t = Test()
    hello = t.hello()
    return hello

class Test:
    def hello(self):
        session['h'] = 'hello'
        return session['h']

class MyUnitTest(unittest.TestCase):
    def test_unit(self):
        t = tests.Test()
        t.hello()

どのように解決するのですか?

アプリケーションにリクエストを出す場合は test_client .

c = app.test_client()
response = c.get('/test/url')
# test response

アプリケーションコンテキストを使用するコードをテストしたい場合 ( current_app , g , url_for ) を押すと app_context .

with app.app_context():
    # test your app context code

リクエストコンテキストを使うテストコードが欲しい場合 ( request , session ) を押すと test_request_context .

with current_app.test_request_context():
    # test your request context code


アプリとリクエストの両方のコンテキストを手動でプッシュすることも可能で、インタープリタを使用する場合に便利です。

>>> ctx = app.app_context()
>>> ctx.push()

を実行すると、Flask-Script や新しい Flask cli が自動的にアプリのコンテキストをプッシュします。 shell コマンドを実行したときに自動的にアプリのコンテキストをプッシュします。


Flask-Testing は、Flaskアプリをテストするためのヘルパーを含む便利なライブラリです。