Skip to main content

Flaskのpytestのコードを少しだけ覗いてみる

Flaskのテストコードより

unittest.TestCaseのsetUpやtearDownを使って、テスト対象のインスタンスを使いまわすやり方があるが、 単純にインスタンスがほしいというだけの場合がある。 それを実現するためにテスト用のメソッド内でインスタンスを生成するのも芸がない。 また、Flaskの用にデコレータを使ったメソッドのテストはどのようにやるのか調べたら、 pytest.fixtureの使い方に興味深い方法があったので紹介。

flask/tests/conftest.py

class Flask(_Flask):
testing = True
secret_key = 'test key'

@pytest.fixture
def app():
app = Flask('flask_test', root_path=os.path.dirname(__file__))
return app

@pytest.fixture
def client(app):
return app.test_client()

flask/tests/test_basic.py

def test_options_work(app, client):
@app.route('/', methods=['GET', 'POST'])
def index():
return 'Hello World'

rv = client.open('/', method='OPTIONS')
assert sorted(rv.allow) == ['GET', 'HEAD', 'OPTIONS', 'POST']
assert rv.data == b''

ドキュメント